2016-04-10 13 views
0

Ich könnte etwas Hilfe verwenden. Ich habe eine Abfrage, die die Anzahl der Fehlercodes mit einer Case und Like-Anweisung mit einer Where-Klausel am Datum zählt. Ich vereinige es dann mit einer sekundären Abfrage. Einziger Unterschied ist das Datum. Es funktioniert, aber gibt die Werte inSQL Union Query Count zu verschiedenen Spalten

zurück

Es gibt die sekundäre Anzahl unter der Spalte "Count" zurück. Ich möchte jedoch eine weitere Spalte hinzufügen. Beispiel:

Fault Code CountA  CountB 
    20k   71   86 
    60k   167  178 

Irgendwelche Vorschläge? Erstelle ich eine temporäre Tabelle?

Hier ist mein Code.

SELECT 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END AS FaultCode 
    , COUNT(FaultCode) AS Day1 
    FROM RmaSummary 
    Where CreationTime > '2016-03-30' AND CreationTIme < '2016-03-31' AND 
    ClosedTime Is null AND (FaultCode LIKE '60%' OR FaultCode LIKE '20%') 
    AND FaultCode <> '20000' AND FaultCode <> '60052' AND FaultCode <> '0' 
    GROUP BY 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END 
    Union All 
    SELECT 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END AS FaultCode 
    , COUNT(FaultCode) AS Day2 
    FROM RmaSummary 
    Where CreationTime > '2016-03-31' AND CreationTIme < '2016-04-01' AND 
    ClosedTime Is null AND (FaultCode LIKE '60%' OR FaultCode LIKE '20%') 
    AND FaultCode <> '20000' AND FaultCode <> '60052' AND FaultCode <> '0' 
    GROUP BY 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END 
+0

Verwenden PIVOT es – Squirrel

Antwort

1

Verwenden Conditional Aggregation statt UNION, die das Ergebnis im erwarteten Format erhalten.

Dadurch werden die Datensätze nur dann, wenn faultcode fallen mit in den angegebenen Datumsbereich

SELECT CASE 
     WHEN faultcode LIKE '60%' THEN '60k' 
     WHEN faultcode LIKE '20%' THEN '20k' 
     END  AS FaultCode, 
     Count(CASE 
       WHEN creationtime > '2016-03-30' 
        AND creationtime < '2016-03-31' THEN faultcode 
      END) AS Day1, 
     Count(CASE 
       WHEN creationtime > '2016-03-31' 
        AND creationtime < '2016-04-01' THEN faultcode 
      END) AS Day2 
FROM rmasummary 
WHERE closedtime IS NULL 
     AND (faultcode LIKE '60%' 
       OR faultcode LIKE '20%') 
     AND faultcode <> '20000' 
     AND faultcode <> '60052' 
     AND faultcode <> '0' 
GROUP BY CASE 
     WHEN faultcode LIKE '60%' THEN '60k' 
     WHEN faultcode LIKE '20%' THEN '20k' 
     END 
+0

Ehrfürchtig zu tun zählen !!! Genau das, was ich brauchte. Vielen Dank. Sehr geschätzt. – EMIE

+1

@EMIE - Schön, dass Ihnen die Antwort geholfen hat. Bitte akzeptieren Sie die Antwort, indem Sie auf das Häkchen-Symbol links neben der Antwort klicken, damit es geschlossen werden kann. Vielen Dank. – Utsav