Сумма на основе столбца даты - PullRequest
0 голосов
/ 29 августа 2018

У меня есть таблица, но мне нужно будет подвести итоги покупок на основе столбца Docdate. Я использую Firebird Interbase. Я попробовал следующее, однако я не вижу, что я делаю неправильно. Любой совет будет очень оценен.

Мой запрос возвращает только мои собственные результаты без суммирования столбца покупок:

DOCTYPE DESCRIPTION STUDENTID   DOCDATE VOUCHERDATE DOCNUMB PURCHASES   NAME    TOTAL
1   800130-EE20180810   800130  8/04/2018   8/04/2018   800130-EE20180810   2.99        
1   800130-EE20180810   800130  8/04/2018   8/04/2018   800130-EE20180810   5.39        
1   800130-EE20180810   800130  8/04/2018   8/04/2018   800130-EE20180810   1.03        
1   800130-EE20150810   800130  7/24/2015   7/24/2015   800130-EE20150810   8.99        
1   800130-EE20150810   800130  7/24/2015   7/24/2015   800130-EE20150810   15.32       
1   800130-EE20150810   800130  7/24/2015   7/24/2015   800130-EE20150810   2.93        

Ожидаемые результаты:

DOCTYPE DESCRIPTION STUDENTID   DOCDATE VOUCHERDATE DOCNUMB PURCHASES   NAME    TOTAL
1   800130-EE20180810   800130  8/04/2018   8/04/2018   800130-EE20180810   9.41
1   800130-EE20150810   800130  7/24/2015   7/24/2015   800130-EE20150810   27.24           

Мой запрос

SELECT DISTINCT
  '1' AS DOCTYPE
 ,DESCRIPTION
    ,STUDENTID
    ,DOCDATE
    ,VOUCHERDATE
    ,DOCNUMB
    ,PURCHASES
    ,NAME
    ,TOTAL
 ,SUM(cast(PURCHASES as decimal(18,5)) )AS PURCHASES
 ,'' AS CCNAME
 ,'' AS CCTOTAL
 FROM   TableA


WHERE 

GROUP BY DESCRIPTION,STUDENTID,DOCDATE,VOUCHERDATE,DOCNUMB,PURCHASES

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Если какой-либо из столбцов уникален для каждой покупки и зависит от строки покупки, удалите их из запроса.

Использование GROUP BY вместо DISTINCT даст вам больше контроля над результатами.

SELECT
    '1' AS DOCTYPE,
    DESCRIPTION,
    STUDENTID,
    DOCDATE,
    VOUCHERDATE,
    DOCNUMB,
    PURCHASES,
    NAME,
    TOTAL,
    SUM(cast(PURCHASES as decimal(18,5)) )AS PURCHASES,
    '' AS CCNAME,
    '' AS CCTOTAL
 FROM   TableA
 GROUP BY DESCRIPTION,
    STUDENTID,
    DOCDATE,
    VOUCHERDATE,
    DOCNUMB,
    NAME,
    TOTAL
0 голосов
/ 30 августа 2018

Вы не должны включать ПОКУПКИ в GROUP BY, если хотите SUM вверх ПОКУПКИ.

И удалите его также из SELECT, пока у него.
Тогда используйте ЗАКУПКИ только в агрегатной функции, такой как SUM, MAX, AVG, ...

Кроме того, вы можете удалить это DISTINCT.
Потому что GROUP BY уже должно быть достаточно для возврата уникальных записей.

Так попробуйте это:

SELECT 
 '1' AS DOCTYPE,
 DESCRIPTION, STUDENTID, DOCDATE, VOUCHERDATE, DOCNUMB,
 MAX(NAME) AS NAME,
 SUM(TOTAL) AS TOTAL,
 CAST(SUM(PURCHASES) AS DECIMAL(18,5)) AS PURCHASES,
 '' AS CCNAME,
 '' AS CCTOTAL
FROM TableA AS a
WHERE STUDENTID = 800130
GROUP BY DESCRIPTION, STUDENTID, DOCDATE, VOUCHERDATE, DOCNUMB
...