如何以逗号分隔值获取列值

Moh*_*mir 14 sql-server

我有一个包含如下行的表

ID  User      Department
1   User1     Admin
2   User1     Accounts
3   User2     Finance
4   User3     Sales
5   User3     Finance
Run Code Online (Sandbox Code Playgroud)

我需要一个选择查询,结果遵循格式

ID  User      Department
1   User1     Admin,Accounts
2   User2     Finance
3   User3     Sales, Finance
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 29

你用sql-server和plsql标记了这个问题,所以我将为SQL Server和Oracle提供答案.

在SQL Server中,您可以使用FOR XML PATH多个行连接在一起:

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;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo.

在Oracle 11g +中,您可以使用LISTAGG:

select "User",
  listagg(department, ',') within group (order by "User") as departments
from yourtable
group by "User"
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

在Oracle 11g之前,您可以使用以下wm_concat功能:

select "User",
  wm_concat(department) departments
from yourtable
group by "User"
Run Code Online (Sandbox Code Playgroud)


Sag*_*wal 8

在Sql Server中,您可以使用它.

DECLARE @UserMaster TABLE( 

    UserID INT NOT NULL, 

    UserName varchar(30) NOT NULL 

); 

INSERT INTO @UserMaster VALUES (1,'Rakesh')

INSERT INTO @UserMaster VALUES (2,'Ashish')

INSERT INTO @UserMaster VALUES (3,'Sagar')

SELECT * FROM @UserMaster

DECLARE @CSV VARCHAR(MAX) 

SELECT @CSV = COALESCE(@CSV + ', ', '') + UserName from @UserMaster 

SELECT @CSV AS Result
Run Code Online (Sandbox Code Playgroud)


小智 5

MYSQL:要将列值作为一个逗号分隔的值,请使用 GROUP_CONCAT( )函数

GROUP_CONCAT(  `column_name` )
Run Code Online (Sandbox Code Playgroud)

例如

SELECT GROUP_CONCAT(  `column_name` ) 
FROM  `table_name` 
WHERE 1 
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用以下 SQL 执行此操作:

SELECT STUFF
(
    (
        SELECT ',' + s.FirstName 
        FROM Employee s
        ORDER BY s.FirstName FOR XML PATH('')
    ),
     1, 1, ''
) AS Employees
Run Code Online (Sandbox Code Playgroud)