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

Jak uzyskać wartości kolumn w jednej wartości oddzielonej przecinkami?

Otagowałeś pytanie za pomocą sql-server i plsql, więc udzielę odpowiedzi zarówno dla SQL Server, jak i Oracle.

W SQL Server możesz użyć FOR XML PATH aby połączyć wiele wierszy razem:

select distinct t.[user],
  STUFF((SELECT distinct ', ' + t1.department
         from yourtable t1
         where t.[user] = t1.[user]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') department
from yourtable t;

Zobacz SQL Fiddle z wersją demonstracyjną .

W Oracle 11g+ możesz użyć LISTAGG :

select "User",
  listagg(department, ',') within group (order by "User") as departments
from yourtable
group by "User"

Zobacz SQL Fiddle z wersją demonstracyjną

Przed Oracle 11g można było użyć wm_concat funkcja:

select "User",
  wm_concat(department) departments
from yourtable
group by "User"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy ktoś mógłby wyjaśnić różnicę między dwoma zapytaniami?

  2. INT vs Unique-Identifier dla pola ID w bazie danych

  3. Jak wstawić wyniki procedury składowanej do tabeli tymczasowej w SQL Server

  4. Różnica dwóch dat w serwerze sql

  5. Jak dowiedzieć się, która kolumna powoduje błąd przepełnienia arytmetycznego po wstawieniu?