Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

STRING_AGG में DISTINCT मान उत्पन्न करें

इसे करने का एक तरीका यह है।

चूँकि आप अलग-अलग गणनाएँ भी चाहते हैं, यह केवल पंक्तियों को दो बार समूहित करके किया जा सकता है। पहला 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .net कोड से संग्रहीत कार्यविधि में तालिका मान पैरामीटर कैसे पास करें?

  2. SQL सर्वर:क्या एक ही समय में दो तालिकाओं में सम्मिलित करना संभव है?

  3. SQL कथन को सारगर्भित क्या बनाता है?

  4. बिटवाइज़-या एक सबक्वेरी में एकत्रित करें

  5. प्राथमिक कुंजी आईडी के साथ क्या होता है जब यह सीमा से अधिक हो जाता है?