在sql查询中汇总聚合

时间:2013-06-21 19:20:01

标签: sql tsql sql-server-2008-r2

如何在当前查询中汇总或添加(PDetail.DETAIL_FOR_QTY)?

SELECT        PDetail.PLU, PDetail.DETAIL_FOR_QTY, PLU.PLU_DESC, PLU.LAST_PRICE
FROM            PDetail INNER JOIN
                     PLU ON PDetail.PLU = PLU.PLU_NUM
WHERE        (PDetail.DEPT = 26) AND (PDetail.StoreNumber IN (1, 2, 3, 4, 7, 8, 10, 12, 14, 16))    AND (PDetail.TIME_STAMP BETWEEN CONVERT(DATETIME, 
                     '2013-06-20 00:00:00', 102) AND CONVERT(DATETIME, '2013-06-20 23:59:59', 102))
ORDER BY PLU.PLU_DESC

目前,我得到的结论是:

08024401    1   item1   17.4900
08048003    1   item2   22.9900
08048004    1   item3   22.9900
08048004    1   item3   22.9900

我正在尝试将这两个相加,因为它们是相同的(基于PDetail INNER JOIN PLU ON PDetail.PLU = PLU.PLU_NUM):

PDetail.PLU    PDetail.DETAIL_FOR_QTY      PLU.PLU_DESC            Don't need to add this
08048004        1                                 item3                       22.9900
08048004        1                                 item3                       22.9900

期望的结果:

08024401    1   item1   17.4900
08048003    1   item2   22.9900
08048004    2   item3   22.9900

3 个答案:

答案 0 :(得分:2)

根据对问题的评论,您只需要

select PDetail.PLU, 
       sum(DETAIL_FOR_QTRY) as [QUANTITY SUM],
       PLU.PLU_Description,
       MAX(PLU.Last_Price)
FROM   PDetail 
INNER JOIN PLU 
ON PDetail.PLU = PLU.PLU_NUM
WHERE    (PDetail.DEPT = 26) 
AND      (PDetail.StoreNumber IN (1, 2, 3, 4, 7, 8, 10, 12, 14, 16))
AND      (PDetail.TIME_STAMP BETWEEN 
                                CONVERT(DATETIME,'2013-06-20 00:00:00', 102) 
                            AND CONVERT(DATETIME, '2013-06-20 23:59:59', 102))
GROUP BY PDetail.PLU, PLU.PLU_Description    

答案 1 :(得分:0)

你可以这样做。总和(PDetail.DETAIL_FOR_QTY)。然后将Group By用于非唯一列。

答案 2 :(得分:0)

这就是诀窍:

SELECT        PDetail.PLU, SUM(PDetail.DETAIL_FOR_QTY) AS DETAIL_FOR_QTY, PLU.PLU_DESC,       PLU.LAST_PRICE
FROM            PDetail INNER JOIN
                     PLU ON PDetail.PLU = PLU.PLU_NUM
WHERE        (PDetail.DEPT = 26) AND (PDetail.StoreNumber IN (1, 2, 3, 4, 7, 8, 10, 12, 14, 16)) AND (PDetail.TIME_STAMP BETWEEN CONVERT(DATETIME, 
                     '2013-06-20 00:00:00', 102) AND CONVERT(DATETIME, '2013-06-20 23:59:59', 102))
GROUP BY PDetail.PLU, PLU.PLU_DESC, PLU.LAST_PRICE, PDetail.DETAIL_FOR_QTY
ORDER BY PLU.PLU_DESC, PDetail.PLU