2016-09-05 2 views
0

zählen, die ich die folgende SQL-Abfrage habenSQL wie Alias ​​als Gesamt

SELECT 
    LoginName as caseowner, 
    SUM(CASE WHEN ClosedDate IS NULL AND accountsDate IS NULL THEN 1 ELSE 0 END)AS Active, 
    SUM(CASE WHEN type IN ('complicated', 'multiple', 'NONE') AND completionDate IS NULL THEN 1 ELSE NULL END) AS t, 
    SUM(CASE WHEN datesent IS NOT NULL AND completionDate IS NOT NULL AND accountsDate IS NULL THEN 1 ELSE 0 END) AS [Setup], 
    SUM(SELECT(Activecases + t + setup)) AS [total] 
FROM   
    Case WITH (NOLOCK) 
WHERE  
    casekey NOT LIKE '%[a-z]%' 
    AND typecode = 'r' 
GROUP BY 
    LoginName 
ORDER BY 
    LoginName ASC 

ich eine ‚total‘ Spalte enthält eine Summe aus dem ‚aktiven‘, ‚t‘ und ‚Setup‘ Summe haben wollen Abfragen. kann mir jemand in die richtige richtung zeigen und mir sagen, wo ich falsch liege? Dank

+0

Syntaxfehler in Zeile 3 bei 'null'THEN'. –

+0

Sorgfältige Platzierung NOLOCK Hinweis mit Aggregationen – scsimon

Antwort

1

Wickeln Sie Ihre Abfrage in einem CTE (oder Unterabfrage) und an der Außenseite der Höhe tun:

;WITH CTE_Totals AS ( 
    SELECT 
     LoginName as caseowner, 
     SUM(CASE WHEN ClosedDate IS NULL AND accountsDate IS NULL THEN 1 ELSE 0 END)AS Active, 
     SUM(CASE WHEN type IN ('complicated', 'multiple', 'NONE') AND completionDate IS NULL THEN 1 ELSE NULL END) AS t, 
     SUM(CASE WHEN datesent IS NOT NULL AND completionDate IS NOT NULL AND accountsDate IS NULL THEN 1 ELSE 0 END) AS [Setup] 
    FROM   
     Case WITH (NOLOCK) 
    WHERE  
     casekey NOT LIKE '%[a-z]%' 
     AND typecode = 'r' 
    GROUP BY 
     LoginName 
) 
SELECT 
    caseowner, 
    Active, 
    t, 
    Setup, 
    Active + t + Setup AS Total 
FROM 
    CTE_Totals 
ORDER BY 
    LoginName ASC; 
+0

danke @chrispickford macht es viel einfacher auf der Außenseite Summen – sql2015