2017-07-04 10 views
0

で私はグループで計算して選択しようが、私はこのエラーを取得:選択SQLグループ

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

は、誰かが私を助けることができますか?

SELECT 
    NT4    AS nt, 
    LN0617.OFFCR  AS OfficeCode, 
    ln0617.RATE * 100 AS LaiSuat, 
    SUM(ln0617.CBAL) AS SoDu, 
    ln0617.RATE * 100 * sum(ln0617.CBAL) AS LS1 
FROM 
    [dbo].[SIL_CM] 
    JOIN [dbo].[LN0617] ON 
    (
     ln0617.ACCTNO = SIL_CM.TK 
     AND 
     ln0617.CBAL <> 0 
     AND 
     SIL_CM.TKTYPE='L' 
    ) 
GROUP BY 
    sil_cm.NT4, 
    LN0617.OFFCR, 
    ln0617.RATE * 100 
ORDER BY 
    LN0617.OFFCR, 
    ln0617.RATE * 100 
+0

あなたは** ln0617.RATE ** –

答えて

0

私はあなたの選択リストに表示のみ可能問題は、次の行である:それは集約関数と混合されているため

ln0617.RATE*100*sum(ln0617.CBAL) as LS1 

SQL Serverがln0617.RATE文句することができます。ここで1つのオプションは、合計の内側ln0617.RATEを移動するには、次のようになります。

select 
    NT4 as nt, 
    LN0617.OFFCR as OfficeCode, 
    ln0617.RATE*100 as LaiSuat, 
    sum(ln0617.CBAL) as SoDu, 
    100*sum(ln0617.RATE * ln0617.CBAL) as LS1 
from [dbo].[SIL_CM] 
... 

乗算が可換であるので、これは動作するはずです。私はあなただけのようにグループ化するための列を参照する必要があると考えてい

+0

おかげでグループがそんなにそれはあまりにもそれが動作 – tnfsmith

0

は、* 100は一定である

SELECT 
     NT4            AS nt 
    , LN0617.OFFCR          AS OfficeCode 
    , ln0617.RATE * 100         AS LaiSuat 
    , SUM(ln0617.CBAL)         AS SoDu 
    , SUM(ln0617.CBAL * ln0617.RATE)/SUM(ln0617.cbal) AS LS1 
FROM [dbo].[SIL_CM] SIL_CM 
JOIN [dbo].[LN0617] LN0617 ON ln0617.ACCTNO = SIL_CM.TK 
WHERE ln0617.CBAL <> 0 
     AND SIL_CM.TKTYPE = 'L' 
GROUP BY 
     sil_cm.NT4 
    , LN0617.OFFCR 
    , ln0617.RATE 
ORDER BY 
     LN0617.OFFCR 
    , ln0617.RAT 
+0

おかげで動作する使用する必要がありますok – tnfsmith

+0

あなたは答えをチェックしてください。他人に解決されていることを知らせてください。 (*白いチェックマークをクリックするか、答えの左に「ダニ」をクリックしてください*) –

関連する問題