2017-07-04 5 views
0

Ich versuche, mit calculate von Gruppe zu wählen, aber ich bekomme diese Fehlermeldung:Wählen Sie SQL durch Gruppe

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.

Kann mir jemand helfen?

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

Sie sollten ** Gruppe von ln0617.RATE verwenden ** –

Antwort

0

Die einzig mögliche Problem, das ich in der Auswahlliste sehen, ist die folgende Zeile ein:

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

SQL Server beschweren können über ln0617.RATE, weil es mit einer Aggregatfunktion gemischt wird. Eine Möglichkeit wäre hier ln0617.RATE in der Summe zu bewegen:

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] 
... 

Dies sollte funktionieren, weil die Multiplikation kommutativ ist.

+0

Dank es so viel Arbeit zu – tnfsmith

0

Ich glaube, Sie nur auf die Spalte verweisen müssen als * für die Gruppierung 100 konstant ist

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

Dank es funktioniert ok – tnfsmith

+0

toll kannst du die antwort dann bitte ankreuzen denn das lässt andere wissen es ist gelöst. (* Klicken Sie auf das weiße Häkchen oder "Häkchen" links neben der Antwort *) –