您好我需要在同一行中包含员工的所有分配。一些员工有1个任务,有些有3个或更多。这是为了进入一个sproc并带回该记录下的所有作业。
数据库中有3条记录的记录示例:
约翰doe - assign1
约翰·多伊 - assign2
John doe - assign3
期望的结果:
3,assign1,assign2,assign3
数据库w / 1记录中的记录示例:
John doe - assign1
期望的结果:
1,assign1
这是我到目前为止所做的,但无法让它发挥作用。
SELECT cast(count(*) as varchar(10))+', ' + min([Assign1])+', '+
max([Assign1]), max([Assign1])
From assignment
where year = '2012'
and first_name = 'firstname'
and last_name = 'lastname'
这是愚蠢的表格结构:
Create INTO [database].[dbo].[assignment]
([employee_key]
,[last_name]
,[first_name]
,[assignment_code]
,[assignment_desc] )
答案 0 :(得分:1)
我会研究使用STUFF
命令。如果你有一个ID列(需要你的表模式),可以优化这个,但是给出了上面的代码,如下所示:
Select cast(count(*) as varchar) + ', ' +
stuff((select ', '+A2.Assign1
from Assignment A2
where year = '2012'
and first_name = 'john'
and last_name = 'doe'
for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '')
FROM Assignment A1
WHERE year = '2012'
and first_name = 'john'
and last_name = 'doe'
这里没有对WHERE子句进行两次硬编码:
Select count(*),
stuff((select ', '+A2.Assign1
from Assignment A2
where A2.Year = A1.Year and
A2.First_Name = A1.First_Name and
A2.Last_Name = A1.Last_Name
for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '')
FROM Assignment A1
WHERE year = '2012'
and first_name = 'john'
and last_name = 'doe'
GROUP BY year, first_name, last_name
祝你好运。