我有几列员工数据。我有一个WebAPI正在从此数据库中读取显示用户的搜索应用程序。我需要获取4个字段的唯一值的列表。我希望在单个查询中做到这一点。
我有25列以上,但我需要4列(JobTitle,Department,Position,Group)的唯一值。我只需要它们以逗号分隔的列表形式返回。
示例SQL Server 2016表:
Name | JobTitle | Department | Position | Group
------|----------|--------------|------------|---------
John | Partner | Department1 | Position1 | Group1
Jane | Manager | Department2 | Position2 | Group2
Joe | Analyst | Department2 | Position2 | Group2
我希望我的结果是一行,并用逗号分隔唯一值的列表:
Departments: Department1,Department2
JobTitles: Partner,Manager,Analyst
Positions: Position1,Position2
Groups: Group1, Group2
答案 0 :(得分:0)
在SQL Server 2016之前,您可以使用STUFF将另一行中的STRING连接到一个用逗号分隔符的行/列中。以下脚本将根据您的要求返回DISTINCT值的列表-
SELECT DISTINCT
STUFF((SELECT DISTINCT ',' + A.JobTitle FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') JobTitle,
STUFF((SELECT DISTINCT ',' + A.Department FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') Department,
STUFF((SELECT DISTINCT ',' + A.Position FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') Position,
STUFF((SELECT DISTINCT ',' + A.[Group] FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') [Group]
FROM Employee A
如果要在不同值列表之前添加标签,请使用以下脚本-
SELECT
'JobTitles: ' + B.JobTitle AS JobTitle,
'Departments: ' + B.Department AS Department,
'Positions: ' + B.Position AS Position,
'Groups: ' + B.[Group] AS [Group]
FROM
(
SELECT DISTINCT
STUFF((SELECT DISTINCT ',' + A.JobTitle FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') JobTitle,
STUFF((SELECT DISTINCT ',' + A.Department FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') Department,
STUFF((SELECT DISTINCT ',' + A.Position FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') Position,
STUFF((SELECT DISTINCT ',' + A.[Group] FROM Employee A FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') [Group]
FROM Employee A
)B