Für jede eindeutige GroupId
Ich würde gerne eine Anzahl von jedem IsGreen
, IsRound
, IsLoud
Zustand und eine Gesamtzahl von Zeilen erhalten.Zählen Sie jede Bedingung innerhalb der Gruppe
Beispieldaten:
-----------------------------------------------------
id | ItemId | GroupId | IsGreen | IsRound | IsLoud
----+--------+---------+---------+---------+---------
1 | 1001 | 1 | 0 | 1 | 1
2 | 1002 | 1 | 1 | 1 | 0
3 | 1003 | 2 | 0 | 0 | 0
4 | 1004 | 2 | 1 | 0 | 1
5 | 1005 | 2 | 0 | 0 | 0
6 | 1006 | 3 | 0 | 0 | 0
7 | 1007 | 3 | 0 | 0 | 0
Wunscher:
----------------------------------------------------------
GroupId | TotalRows | TotalGreen | TotalRound | TotalLoud
--------+-----------+------------+------------+-----------
1 | 2 | 1 | 2 | 1
2 | 3 | 1 | 0 | 1
3 | 2 | 0 | 0 | 0
ich den folgenden Code bin mit der Tabelle zu erstellen, das Problem, das ich habe, ist, dass, wenn ein der Gruppen haben keine Zeilen, die einer der Bedingungen entsprechen, dass die Gruppe nicht in der Final Table erscheint. Was ist der beste Weg, um das zu erreichen, was ich tun möchte?
SELECT total.GroupId
, total.[Count] AS TotalRows
, IsGreen.[Count] AS TotalGreen
, IsRound.[Count] AS TotalRound
, IsLoud.[Count] AS TotalLoud
FROM (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
GROUP BY GroupId
) TotalRows
INNER JOIN (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
WHERE IsGreen = 1
GROUP BY GroupId
) IsGreen ON IsGreen.GroupId = TotalRows.GroupId
INNER JOIN (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
WHERE IsRound = 1
GROUP BY GroupId
) IsRound ON IsRound.GroupId = TotalRows.GroupId
INNER JOIN (
SELECT GroupId
, count(*) AS [Count]
FROM TestData
WHERE IsLoud = 1
GROUP BY GroupId
) IsLoud ON IsLoud.GroupId = TotalRows.GroupId
Warum ist dies eine einfache 'Gruppe von groupID' und ein' count' und 'Summe?' – xQbert
Ihr Code würde funktionieren, wenn Sie verändert die INNER JOIN auf LEFT OUTER JOIN. – Matt