इसे करने का एक तरीका यह है।
चूँकि आप अलग-अलग गणनाएँ भी चाहते हैं, यह केवल पंक्तियों को दो बार समूहित करके किया जा सकता है। पहला GROUP BY
डुप्लिकेट हटा देगा, दूसरा GROUP BY
अंतिम परिणाम देगा।
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
;
परिणाम
+---------+-----------+--------------+----------+
| State | City | # Of Sitings | Animals |
+---------+-----------+--------------+----------+
| Arizona | Flagstaff | 1 | dog |
| Arizona | Phoenix | 2 | bird,dog |
| Florida | Orlando | 2 | bird,dog |
+---------+-----------+--------------+----------+
यदि आपको अभी भी 8000 वर्णों से अधिक के बारे में एक त्रुटि संदेश मिल रहा है, तो मानों को varchar(max)
पर डालें STRING_AGG
. से पहले ।
कुछ इस तरह
STRING_AGG(CAST(Siting AS varchar(max)),',') AS Animals