2017-10-14 1 views
0

Ich versuche, zwei sehr ähnliche Abfragen zusammenzuführen. Die einzige andere Sache ist in der WHERE Klausel:Zwei SQL Server-Abfragen mit unterschiedlicher WHERE-Klausel

SELECT 
    CONVERT(VARCHAR(10), Date, 101) as Date, 
    COUNT(*) as WinnerCount 
FROM 
    table t1 
WHERE 
    t1.Result = 'Winner' 
GROUP BY 
    CONVERT(VARCHAR(10), Date, 101) 

und die zweite mit Loser Klausel:

SELECT 
    CONVERT(VARCHAR(10), Date, 101) as Date, 
    COUNT(*) as LoserCount 
FROM 
    table t1 
WHERE 
    t1.Result = 'Loser' 
GROUP BY 
    CONVERT(VARCHAR(10), Date, 101) 

Was ich versuche zu erreichen ist ein Ergebnis gesetzt wie folgt zu erhalten:

Date  | WinnerCount | LoserCount 
01/01/2017  24     16 
17/02/2017  13     9 

ich habe dies als zwei resultset kommen mit zu verschmelzen versucht:

SELECT 
    FirstSet.Date 
FROM 
    (SELECT 
     CONVERT(VARCHAR(10), Date, 101) as Date, 
     COUNT(*) as Count 
    FROM 
     table t1 
    WHERE 
     t1.Result = 'Winner' 
    GROUP BY 
     CONVERT(VARCHAR(10), Date, 101)) AS FirstSet 
JOIN 
    (SELECT 
     CONVERT(VARCHAR(10), Date, 101) as Date, 
     COUNT(*) as Count 
    FROM 
     table t1 
    WHERE 
     t1.Result = 'Loser' 
    GROUP BY 
     CONVERT(VARCHAR(10), Date, 101)) AS SecondSet ON FirstSet.Date = SecondSet.Date 
ORDER BY 
    FirstSet.Date 

aber in den Ergebnissen Ich habe nur Daten:/

Antwort

4

Sie diese Abfrage verwenden. Insted aller Zeilen zu zählen, können Sie alle Vorkommen des gewünschten Text (* Gewinner“oder‚Verlierer‘in diesem Fall) Summe

SELECT 
    CONVERT(VARCHAR(10), Date, 101) as Date, 
    SUM(CASE WHEN t1.Result = 'Winner' THEN 1 ELSE 0 END) as WinnerCount, 
    SUM(CASE WHEN t1.Result = 'Loser' THEN 1 ELSE 0 END) as LoserCount 
from table t1 
where t1.Result in ('Winner', 'Loser') 
group by 
    CONVERT(VARCHAR(10), Date, 101) 
2

Sie können wie etwas versuchen.

SELECT 
    CONVERT(VARCHAR(10), Date, 101) as Date, 
    SUM(CASE WHEN t1.Result = 'Winner' THEN 1 ELSE 0) AS WinnerCount, 
    SUM(CASE WHEN t1.Result = 'Loser' THEN 1 ELSE 0) AS LoserCount 
FROM 
    table t1 
group by 
    CONVERT(VARCHAR(10), Date, 101) 
3

Die obige akzeptierte Antwort liefert Ihnen das korrekte Ergebnis. Wenn Sie jedoch die Anzahl beibehalten und die Summe nicht zum Aggregieren der Ergebnisse verwenden möchten, können Sie alternativ die folgenden Werte verwenden:

select 
    CONVERT(VARCHAR(10), Date, 101) as Date, 
    COUNT(CASE WHEN t1.Result = 'Winner' THEN 1 ELSE NULL END) as WinnerCount, 
    COUNT(CASE WHEN t1.Result = 'Loser' THEN 1 ELSE NULL END) as LoserCount 
from table as t1 
where t1.Result in ('Winner', 'Loser') 
group by 
    CONVERT(VARCHAR(10), Date, 101) 
Verwandte Themen