我有一个包含如下行的表
ID  User      Department
1   User1     Admin
2   User1     Accounts
3   User2     Finance
4   User3     Sales
5   User3     Finance
我需要一个选择查询,结果遵循格式
ID  User      Department
1   User1     Admin,Accounts
2   User2     Finance
3   User3     Sales, Finance
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;
在Oracle 11g +中,您可以使用LISTAGG:
select "User",
  listagg(department, ',') within group (order by "User") as departments
from yourtable
group by "User"
在Oracle 11g之前,您可以使用以下wm_concat功能:
select "User",
  wm_concat(department) departments
from yourtable
group by "User"
在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
小智 5
MYSQL:要将列值作为一个逗号分隔的值,请使用   GROUP_CONCAT( )函数  
GROUP_CONCAT(  `column_name` )
例如
SELECT GROUP_CONCAT(  `column_name` ) 
FROM  `table_name` 
WHERE 1 
LIMIT 0 , 30
小智 5
您可以使用以下 SQL 执行此操作:
SELECT STUFF
(
    (
        SELECT ',' + s.FirstName 
        FROM Employee s
        ORDER BY s.FirstName FOR XML PATH('')
    ),
     1, 1, ''
) AS Employees
| 归档时间: | 
 | 
| 查看次数: | 92861 次 | 
| 最近记录: |