Đây là một cách để làm điều đó.
Vì bạn cũng muốn có các số đếm riêng biệt, nó có thể được thực hiện đơn giản bằng cách nhóm các hàng lại hai lần. GROUP BY
đầu tiên sẽ xóa các bản sao, GROUP BY
thứ hai sẽ tạo ra kết quả cuối cùng.
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
;
Kết quả
+---------+-----------+--------------+----------+
| State | City | # Of Sitings | Animals |
+---------+-----------+--------------+----------+
| Arizona | Flagstaff | 1 | dog |
| Arizona | Phoenix | 2 | bird,dog |
| Florida | Orlando | 2 | bird,dog |
+---------+-----------+--------------+----------+
Nếu bạn vẫn nhận được thông báo lỗi về việc vượt quá 8000 ký tự, hãy truyền các giá trị thành varchar(max)
trước STRING_AGG
.
Một cái gì đó giống như
STRING_AGG(CAST(Siting AS varchar(max)),',') AS Animals