2017-01-12 22 views
0

私は開発者ではありませんが、開発者に手伝ってもらう前にこの作業を行う必要があります。 私は以下のことを持っています。それはうまくいっていますが、私はそれを正しいものにするために選択する必要があり、グループに追加する必要があると私に伝えます。私がそれをするとき、それは結果を「重複する」。なぜグループ化が必要なのですか

何作品:

Select ALTEXTCUSTREF 
    ,(SELECT AVG(C.SALESPRICE*C.QTY)) AS Budget 
    ,select SUM(B.LEDGERSALESAMOUNT) as Labour 
from SMMACTIVITIES AS A 
LEFT JOIN PROJEMPLTRANS AS B ON A.ACTIVITYNUMBER=B.ACTIVITYNUMBER 
LEFT JOIN PROJFORECASTEMPL AS C ON A.ACTIVITYNUMBER=C.ACTIVITYNUMBER 
WHERE A.ACTIVITYNUMBER LIKE '1234%' 
group by A.ALTEXTCUSTREF, C.ACTIVITYNUMBER 

が、私は次のようでしたのでB.LEDGERSALESAMOUNTに条件を配置する必要があります。

Select ALTEXTCUSTREF 
    ,(SELECT AVG(C.SALESPRICE*C.QTY)) AS Budget 
    ,(select SUM(B.LEDGERSALESAMOUNT) where B.CATEGORYID NOT LIKE 'P_%') as Labour 
from SMMACTIVITIES AS A 
LEFT JOIN PROJEMPLTRANS AS B ON A.ACTIVITYNUMBER=B.ACTIVITYNUMBER 
LEFT JOIN PROJFORECASTEMPL AS C ON A.ACTIVITYNUMBER=C.ACTIVITYNUMBER 
WHERE A.ACTIVITYNUMBER LIKE '1234%' 
group by A.ALTEXTCUSTREF, C.ACTIVITYNUMBER 

そして、私はこのエラーを取得する:

Msg 8120, Level 16, State 1, Line 4 Column 'PROJEMPLTRANS.CATEGORYID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

しかし、私は私が間違っていALTEXTCUSTREF分割アウトのラインを取得することで、グループにB.CATEGORYIDを置く場合。

助けてください。私は立ち往生して時間がなくなっています。 OPの新しい意思として

+0

あなたが「ここで、b持っ​​ているため、エラーが表示されているだけで集約された機能を残して、彼らは不必要で、それらの内側の選択を外し、そしてあなた,,,によりグループからc.ActivityNumberを削除.CategoryIdが 'p_%'と同じではありません。内側の選択で、大文字に変換してください。 – Veljko89

+0

使用しているDBMSにタグを付けてください。 (そのクエリは製品固有です。) – jarlh

答えて

0

Editted

SELECT bg.altextcustref 
    ,bg.activitynumber 
    ,bg.budget 
    ,lb.labour 
FROM 
(
    SELECT altextcustref 
     ,activitynumber 
     ,AVG(c.salesprice * c.qty) AS budget 
    FROM smmactivities AS a 
    LEFT JOIN projforecastempl AS c 
    ON a.activitynumber = c.activitynumber 
    WHERE a.activitynumber LIKE '1234%' 
    GROUP BY a.altextcustref, c.activitynumber 
) AS bg 
INNER JOIN 
(
    SELECT altextcustref 
     ,activitynumber 
     ,SUM(b.ledgersalesamount) AS labour 
    FROM smmactivities AS a 
    LEFT JOIN projempltrans AS b 
    ON a.activitynumber = b.activitynumber 
    WHERE a.activitynumber LIKE '1234%' 
     AND b.categoryid NOT LIKE 'P_%' 
    GROUP BY a.altextcustref, c.activitynumber 
) AS lb 
ON bg.altextcustref = lb.altextcustref 
    AND bg.activitynumber = lb.activitynumber; 
+0

ありがとうございます。しかし今、私の金額はすべて二倍になるはずです。これは私が参加した方法ですか? – Tooold

+0

@Toooldこれはあなたの 'JOIN'ステートメントのためかもしれません、あなたはあなたのデータをチェックする必要があります。同じクエリを試してみますが、 'SELECT *'を使って 'GROUP BY'節を削除し、' ORDER BY a.altextcustref、c.activitynumber; 'を追加して重複行を確認してください。 –

+0

私はこれを行いました。JOIN PROJFORECASTEMPL AS C ON SMMACTIVITIES.ACTIVITYNUMBER = C.ACTIVITYNUMBERは、値が2倍であることを示します。私は他のすべての参加を試みましたが、それは違いはありません。何もない誰かの手がかり – Tooold

関連する問題