sql >> Database >  >> RDS >> Sqlserver

Produceer DISTINCT-waarden in STRING_AGG

Hier is een manier om het te doen.

Omdat u ook de afzonderlijke tellingen wilt, kunt u dit eenvoudig doen door de rijen twee keer te groeperen. De eerste GROUP BY zal duplicaten verwijderen, de tweede GROUP BY zal het eindresultaat opleveren.

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
;

Resultaat

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

Als je nog steeds een foutmelding krijgt over meer dan 8000 tekens, cast de waarden dan naar varchar(max) voor STRING_AGG .

Iets als

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


  1. JQuery Ajax gebruiken om gegevens op te halen uit Mysql

  2. Een C#-lijst in een database invoegen met Dapper.NET

  3. Hoe doe ik top 1 in Oracle?

  4. SqlTransaction gebruiken in C#