我有一个查询,[Query1],包含员工姓名,项目,日期,月份和年份。
在另一个查询[Query2]中,我获取所有值并将它们放入交叉表中。我的行是“年,月,员工”。我的专栏是“Day”。我的价值观是项目。
问题是,对于一个日期,可能会有多个项目分配给员工。
当我尝试使用IIf(Count(*)>0,[Project],"")
将项目作为值放入表中时,我收到错误,因为项目可能有多个可能的值,并且访问权限不知道选择哪一个。
如果有多个Project,我需要一种方法来连接值。
前:
[Query1]
Bill | CC555 | 28 | 03 | 2014
Jim | CC999 | 29 | 03 | 2014
Jim | CC555 | 29 | 03 | 2014
John | CC555 | 29 | 03 | 2014
[Query2]
Year | Month | Employee | 1 | 2 | 3 | ... | 27 | 28 | 29 | 30 | 31
2014 | 03 | Bill | - | - | - | ... | - | CC555 | - | - | -
2014 | 03 | Jim | - | - | - | ... | - | - | CC555 + CC999 | - | -
2014 | 03 | John | - | - | - | ... | - | - | CC555 | - | -
除此之外:[Query1]是动态的,可能会删除或添加重复日期,因此[Query2]值必须相应更改。
答案 0 :(得分:1)
一个简单的例子,你必须使它成为动态的,在实际场景中如果使用动态sql.i认为不需要动态,只需1到31的硬代码就不需要表变量和CTE
;With CTE as
(
select 'Bill' Employee ,'CC555' codes,28 dd,03 mm ,2014 yrs union all
select 'Jim ','CC999', 29 , 03 , 2014 union all
select 'Jim ','CC555', 29 , 03 , 2014 union all
select 'John','CC555', 29 , 03 , 2014
)
select yrs,mm,Employee,isnull([28],'-')[28],[29],[30] from
(select Employee,dd,mm,yrs
,stuff((select ','+codes from cte b where b.Employee=a.Employee for xml path('')),1,1,'')codes
from cte a ) src
pivot (min(codes) for dd in([28],[29],[30])) pvt
答案 1 :(得分:0)
通过使用此处给出的函数allenbrowne.com/func-concat.html
,并按照此处给出的示例http://www.access-programmers.co.uk/forums/showthread.php?t=234291
,我能够解决问题。