Как вычесть 2 суммы в запросе SQL - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу найти общую сумму задолженности по конкретной сумме товара, исключая сумму возврата.

Будет два столбца для каждого предмета в зависимости от того, сколько раз он был продан, final_amount и 2-й refund_amount для каждого предмета, и я хочу вычесть общую сумму refund_amount из final_amount для каждого предмета.

PFB код / ​​запрос

SELECT item_id,
       SUM(final_amount) as total_amount,
       SUM(ISNULL(refund_amount, 0)) AS total_refund
       SUM(final_amount) - SUM(ISNULL(refund_amount, 0)) AS outstanding_amount                    
FROM tabel1 
WHERE item_id in ('119688521',
                  '109536343',
                  '99459466',
                  '97126817',
                  '138148320',
                  '107816131')
GROUP BY 1

Я получаю синтаксическую ошибку для "SUM" около

SUM(final_amount)-SUM(ISNULL(refund_amount, 0)) AS outstanding_amount

Я пробовал другой код:

SUM(total_amount - total_refund) AS npv

И я получил ту же ошибку.

Ответы [ 4 ]

1 голос
/ 30 апреля 2019

Во-первых, в синтаксисе есть несколько ошибок.Вам не хватает запятой между всеми элементами select (между вашими total_refund и outstanding_amount).Вы также должны проверить, был ли SUM() пустым, а не был ли столбец пустым.Вы также можете использовать COALESCE(), если хотите.Наконец, вам нужно GROUP BY что-нибудь полезное, например, item_id.

SELECT item_id,
       SUM(final_amount) as total_amount,
       ISNULL(SUM(refund_amount), 0) AS total_refund,
       SUM(final_amount) - ISNULL(SUM(refund_amount), 0) AS outstanding_amount
FROM tabel1 WHERE item_id in ('119688521',
                              '109536343',
                              '99459466',
                              '97126817',
                              '138148320',
                               '107816131')

GROUP BY item_id
0 голосов
/ 30 апреля 2019

Вам не хватает поставить запятую (,) после столбца ".... AS total_refund". Добавьте запятую, и это решит проблему синтаксиса.

И, пожалуйста, используйте GROUP BY item_id вместо GROUP BY 1

0 голосов
/ 30 апреля 2019

Попробуйте это

SELECT item_id,
SUM(final_amount) as total_amount,
SUM(ISNULL(refund_amount, 0)) AS total_refund

SUM(final_amount - isnull(refund_amount, 0)) AS outstanding_amount

FROM tabel1 WHERE item_id in ('119688521',
'109536343',
'99459466',
'97126817',
'138148320',
'107816131')

GROUP BY item_id
0 голосов
/ 30 апреля 2019

Вам не хватает запятой. Кроме того, вы должны проверить на NULL после на SUM():

SELECT item_id,
       SUM(final_amount) as total_amount,
       COALESCE(SUM(refund_amount), 0) AS total_refund,
       (SUM(final_amount) - COALESCE(SUM(refund_amount), 0)
       )  AS outstanding_amount
FROM tabel1
WHERE item_id in ('119688521', '109536343', '99459466', '97126817', '138148320', '107816131')
GROUP BY 1
...