0

SQL Server 2008 を使用して、次の 2 つのテーブルがSALESORD_HDRあります。SALESORD_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 に答える