2013-05-29 68 views
0

使用SQL Server 2008,我有兩個表:SALESORD_HDRSALESORD_LINES如何從查詢得到的結果的總和SQL

常見的標識是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 

這給出了正確的數據來處理。但是我想爲STOCKCODE的每條記錄找到ORD_QUANT中的值的總和。

我試圖把這樣的:

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

,但失敗了,說

消息8120,級別16,狀態1,行1
列 'SALESORD_LINES.STOCKCODE' 是無效的選擇列表,因爲它不包含在聚合函數或GROUP BY子句中。

有將是語法,我不知道:)

任何幫助將不勝感激之和的方式!

+2

您需要在當前查詢的末尾添加一個「GROUP BY SOL.STOCKCODE」(在'ORDER BY'之前,雖然) – Lamak

+1

@Lamak添加一個答案。 :) – Taryn

+4

@bluefeet我寧願選擇關閉太過本地化:-) – Lamak

回答

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

您正在按錯誤列分組 – Lamak

+0

我的錯誤,感謝您的指針 –

+0

感謝Phil。我添加了引用,但現在它再次失敗,說同樣的錯誤。我在每個地方添加了'SOL.ORD_QUANT'。另外,我不知道爲什麼@lamak想要關閉我的問題?它有什麼問題?當我尋求幫助並提供所有可能的細節時,「它的本地化」意味着什麼? – Bevan

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 

這是有效的。謝謝你們。