Hier ist eine Möglichkeit, dies zu tun.
Da Sie auch die unterschiedlichen Zählungen wünschen, können Sie die Zeilen einfach zweimal gruppieren. Das erste GROUP BY
entfernt Duplikate, das zweite GROUP BY
wird das Endergebnis liefern.
WITH
Sitings
AS
(
SELECT * FROM (VALUES
(1, 'Florida', 'Orlando', 'bird'),
(2, 'Florida', 'Orlando', 'dog'),
(3, 'Arizona', 'Phoenix', 'bird'),
(4, 'Arizona', 'Phoenix', 'dog'),
(5, 'Arizona', 'Phoenix', 'bird'),
(6, 'Arizona', 'Phoenix', 'bird'),
(7, 'Arizona', 'Phoenix', 'bird'),
(8, 'Arizona', 'Flagstaff', 'dog')
) F (ID, State, City, Siting)
)
,CTE_Animals
AS
(
SELECT
State, City, Siting
FROM Sitings
GROUP BY State, City, Siting
)
SELECT
State, City, COUNT(1) AS [# Of Sitings], STRING_AGG(Siting,',') AS Animals
FROM CTE_Animals
GROUP BY State, City
ORDER BY
State
,City
;
Ergebnis
+---------+-----------+--------------+----------+
| State | City | # Of Sitings | Animals |
+---------+-----------+--------------+----------+
| Arizona | Flagstaff | 1 | dog |
| Arizona | Phoenix | 2 | bird,dog |
| Florida | Orlando | 2 | bird,dog |
+---------+-----------+--------------+----------+
Wenn Sie immer noch eine Fehlermeldung über das Überschreiten von 8000 Zeichen erhalten, wandeln Sie die Werte in varchar(max)
um vor STRING_AGG
.
So etwas wie
STRING_AGG(CAST(Siting AS varchar(max)),',') AS Animals