Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Twórz wartości DISTINCT w STRING_AGG

Oto jeden ze sposobów, aby to zrobić.

Ponieważ chcesz również uzyskać różne liczby, możesz to zrobić po prostu dwukrotnie grupując wiersze. Pierwsza GROUP BY usunie duplikaty, drugi GROUP BY przyniesie ostateczny wynik.

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
;

Wynik

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

Jeśli nadal otrzymujesz komunikat o błędzie o przekroczeniu 8000 znaków, rzuć wartości na varchar(max) przed STRING_AGG .

Coś jak

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. Automatyzacja przetwarzania modelu tabelarycznego baz danych usług Analysis Services (SSAS) w programie SQL Server

  2. SQL Server 2016:sys.dm_exec_function_stats

  3. Niepoprawna składnia w pobliżu ''

  4. Wygeneruj zestaw wyników inkrementacji dat w TSQL

  5. Jak przekonwertować wartości wierszy na kolumny z dynamiczną liczbą kolumn?