如何从SQL中的查询中获取结果的总和

时间:2013-05-29 20:19:08

标签: sql sum

使用SQL Server 2008,我有两个表:SALESORD_HDRSALESORD_LINES

公共标识符为SALESORD_HDR.SEQNO

我想找到此查询的结果总和:

Select 
    SOL.STOCKCODE as SC,ORD_QUANT as OQ
from 
    SALESORD_LINES SOL
INNER JOIN 
    SALESORD_HDR SOH ON SOL.HDR_SEQNO = SOH.SEQNO
WHERE 
    SOL.HDR_STATUS = '6' AND SOH.ORDERDATE > DATEDIFF(D,120,getdate())
ORDER BY 
    SOL.STOCKCODE

这给出了正确的数据。但我想在ORD_QUANT的每条记录中找到STOCKCODE中值的总和。

我试过这个:

 Select SOL.STOCKCODE as SC,SUM(ORD_QUANT) as OQ

但它失败了,说

  

Msg 8120,Level 16,State 1,Line 1
  列'SALESORD_LINES.STOCKCODE'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

将会有一种方法来解释我不知道的SUM :)

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您只需添加GROUP BY子句:

Select SOL.STOCKCODE as SC,SUM([tableReference].ORD_QUANT) as OQ
from SALESORD_LINES SOL
INNER JOIN SALESORD_HDR SOH
    ON SOL.HDR_SEQNO = SOH.SEQNO
WHERE SOL.HDR_STATUS = '6' AND SOH.ORDERDATE > DATEDIFF(D,120,getdate())
GROUP BY SOL.STOCKCODE 
ORDER BY SOL.STOCKCODE

我还添加了一些伪代码[tableReference],因为您忘记引用字段来自哪个表。

答案 1 :(得分:0)

@Lamak和@Phil Cross都给出了很好的答案。修改后的代码是:

Select SOL.STOCKCODE as SC,SUM(SOL.ORD_QUANT) as OQ
from SALESORD_LINES SOL
INNER JOIN SALESORD_HDR SOH
ON SOL.HDR_SEQNO = SOH.SEQNO
WHERE SOL.HDR_STATUS = '6' AND SOH.ORDERDATE > DATEDIFF(D,120,getdate())
GROUP BY SOL.STOCKCODE
ORDER BY SOL.STOCKCODE

这很有效。谢谢你们。