0

使用 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

但它失败了,说

消息 8120,级别 16,状态 1,第 1
行列 'SALESORD_LINES.STOCKCODE' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

会有一种我不知道的 SUM 语法方法:)

任何帮助将不胜感激!

4

2 回答 2

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],因为您忘记引用字段来自哪个表。

于 2013-05-29T20:22:23.803 回答
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

这行得通。谢谢你们。

于 2013-05-29T20:36:37.967 回答