SQL-запрос для получения промежуточного итога в последней строке номера счета

Я написал следующий SQL-запрос, который дает результат не так, как я хочу. Единственное изменение, которое я хочу, это то, что я не хочу повторять промежуточный итог в каждой строке, что сейчас делает мой запрос:

Вместо этого я хочу, чтобы это было только в последней строке каждого уникального номера bill_number:

Запрос

    SELECT 
  ROW_NUMBER() OVER(
    ORDER BY 
      S.bill_num
  ) SN, 
  ROW_NUMBER() OVER(
    PARTITION BY S.bill_num 
    ORDER BY 
      S.bill_num
  ) AS [ITEM_NO.], 
  s.bill_date AS [BILL_DATE], 
  s.bill_num AS [BILL_NO.], 
  s.custid AS [CUST_ID], 
  c.fullname [CUSTOMER], 
  s.article AS [ARTICLE], 
  s.price AS [MRP], 
  s.linetotal AS [TOTAL],
  b.billamt as [BILL_TOTAL] 
FROM 
  sold s 
  LEFT JOIN customers c ON s.custid = c.custid 
  LEFT JOIN bills b ON S.bill_num = B.bill_num  
WHERE 
  s.bill_date = CONVERT(date, '2020/12/01') AND B.isexpress <> 'P'  
ORDER by 
  S.bill_num

Я думаю, вы поняли, чего я хочу, из приведенных изображений.

что вы пытались до сих пор достичь желаемого формата?

Daemon Painter 09.12.2020 16:40

Я ищу по всему Интернету, чтобы получить то, что я хочу, но я думаю, что не смог найти правильное ключевое слово, чтобы задать вопрос. ответы приходят для нарастающей суммы, и метод объединения я не могу применить в этом запросе.

Raj Shekhar Singh 09.12.2020 16:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью row_number() и выражения CASE.

Однако ваш запрос и результат предполагают, что у вас есть несколько строк с одним и тем же s.bill_num; чтобы получить стабильный результат, вам нужен столбец, который можно использовать для однозначного упорядочения строк с повторяющимися значениями — позвольте мне предположить s.id:

SELECT 
    ROW_NUMBER() OVER(ORDER BY S.bill_num, S.id) SN, 
    ROW_NUMBER() OVER(PARTITION BY S.bill_num ORDER BY S.id) AS [ITEM_NO.], 
    s.bill_date AS [BILL_DATE], 
    s.bill_num AS [BILL_NO.], 
    s.custid AS [CUST_ID], 
    c.fullname [CUSTOMER], 
    s.article AS [ARTICLE], 
    s.price AS [MRP], 
    s.linetotal AS [TOTAL],
    CASE WHEN ROW_NUMBER() OVER(PARTITION BY S.bill_num ORDER BY S.id DESC) = 1 THEN b.billamt END as [BILL_TOTAL] 
FROM sold s 
LEFT JOIN customers c ON s.custid = c.custid 
LEFT JOIN bills b ON S.bill_num = B.bill_num AND B.isexpress <> 'P'  
WHERE s.bill_date = CONVERT(date, '2020/12/01')
ORDER by S.bill_num

Обратите внимание, что я переместил условие B.isexpress из пункта WHERE в пункт ON соответствующего LEFT JOIN; в противном случае это приведет к отфильтровыванию строк, которые не совпадают в bills, что, похоже, не является вашим намерением.

круто, изложение дела - это ключ, который я искал. большое спасибо, вы спасли мне жизнь. Я просто вставил оператор case в свой существующий запрос и бум.

Raj Shekhar Singh 09.12.2020 16:53

Я также пробовал с IIF 'IIF (ROW_NUMBER() OVER (PARTITION BY S.bill_num ORDER BY S.bill_num DESC) = 1, b.billamt, 0) as [BILL_TOTAL]', это также дало тот же результат

Raj Shekhar Singh 09.12.2020 17:12

Я НЕ МОГУ ВСТАВИТЬ ПОЛНЫЙ КОД, ИНАЧЕ Я БЫ ВСТАВИЛ бы ПОЛНЫЙ КОД.

Raj Shekhar Singh 09.12.2020 17:14

Другие вопросы по теме

Похожие вопросы