sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte DISTINCT hodnoty v STRING_AGG

Zde je jeden způsob, jak to udělat.

Protože chcete také odlišné počty, lze to provést jednoduše seskupením řádků dvakrát. První GROUP BY odstraní duplikáty, druhý GROUP BY vytvoří konečný výsledek.

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
;

Výsledek

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

Pokud se stále zobrazuje chybová zpráva o překročení 8000 znaků, přeneste hodnoty do varchar(max) před STRING_AGG .

Něco jako

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


  1. Oracle SQL Developer a PostgreSQL

  2. Jak nastavit pondělí jako první den v týdnu na SQL Server

  3. CREATE TABLE MySQL vs T-SQL s příklady syntaxe

  4. Chyba SQL ORA-01722:neplatné číslo