Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Създаване на DISTINCT стойности в STRING_AGG

Ето един начин да го направите.

Тъй като искате и отделните бройки, това може да стане просто чрез групиране на редовете два пъти. Първата 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. SQL транспониране на пълната таблица

  2. Как да инсталирате SQLOPS на Mac

  3. Вмъкване на данни чрез функция с таблично значение в SQL Server

  4. SIN() Примери в SQL Server

  5. Как да изчислим общите часове за пътуване между град x и y и обратно