sql >> Database teknologi >  >> RDS >> Sqlserver

Fremstil DISTINCT-værdier i STRING_AGG

Her er en måde at gøre det på.

Da du også vil have de forskellige tæller, kan det gøres ved blot at gruppere rækkerne to gange. Den første GROUP BY vil fjerne dubletter, den anden GROUP BY vil producere det endelige resultat.

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 | +---------+-----------+--------------+----------+

Hvis du stadig får en fejlmeddelelse om overskridelse af 8000 tegn, skal du caste værdierne til varchar(max) før STRING_AGG .

Noget lignende

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


  1. STRING_SPLIT() i SQL Server 2016:Opfølgning #2

  2. Fysiske replikationsmekanismer i PostgreSQL

  3. Transaktionsisolering i PostgreSQL

  4. Find ikke-ASCII-tegn i varchar-kolonner ved hjælp af SQL Server