我有一个包含如下行的表
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)
在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)
在Oracle 11g之前,您可以使用以下wm_concat
功能:
select "User",
wm_concat(department) departments
from yourtable
group by "User"
Run Code Online (Sandbox Code Playgroud)
在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)
归档时间: |
|
查看次数: |
92861 次 |
最近记录: |