sql >> Databasteknik >  >> RDS >> Sqlserver

Producera DISTINCT-värden i STRING_AGG

Här är ett sätt att göra det.

Eftersom du också vill ha de distinkta siffrorna, kan det enkelt göras genom att gruppera raderna två gånger. Den första GROUP BY kommer att ta bort dubbletter, den andra GROUP BY kommer att producera det slutliga resultatet.

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
;

Resultat

+---------+-----------+--------------+----------+
|  State  |   City    | # Of Sitings | Animals  |
+---------+-----------+--------------+----------+
| Arizona | Flagstaff |            1 | dog      |
| Arizona | Phoenix   |            2 | bird,dog |
| Florida | Orlando   |            2 | bird,dog |
+---------+-----------+--------------+----------+

Om du fortfarande får ett felmeddelande om att överskrida 8000 tecken, casta sedan värdena till varchar(max) före STRING_AGG .

Något liknande

STRING_AGG(CAST(Siting AS varchar(max)),',') AS Animals


  1. Ta bort dubbletter av rader (baserat på värden från flera kolumner) från SQL-tabellen

  2. SQL Server som kör övervakning av frågor

  3. SQL Server Error 4104:Den flerdelade identifieraren kunde inte bindas.

  4. Definiera tabell- och kolumnnamn som argument i en plpgsql-funktion?