日期:2014-05-17  浏览次数:20546 次

sql 统计
表1
姓名    完成项目
王      项目一/2*项目二/4
王      项目二/1*项目三/1
张      项目一/1*项目三/3

表2
人员     定量      定量次数
王       项目一      3
王       项目二      2
王       项目三      5
张       项目一      2
张       项目二      3
张       项目三      2

我想得出
人员     定量      定量次数    完成次数
王       项目一      3           2
王       项目二      2           5
王       项目三      5           1
张       项目一      2           1
张       项目二      3           0
张       项目三      2           3

------解决方案--------------------

select * into #t1 from
(
select '王'name,      '项目一/2*项目二/4' pro
union all select '王',      '项目二/1*项目三/1'
union all select '张',      '项目一/1*项目三/3'
)a


select * into #t2 from
(
select '王'name,       '项目一' pro,     3 num
union all select '王',       '项目二',      2
union all select '王',       '项目三',      5
union all select '张',       '项目一',      2
union all select '张',       '项目二',      3
union all select '张',       '项目三',      2
)a

;with cte as(
select a.name,b.pro  
from (
select name,convert(xml,'<row><b>'+rtrim(replace(pro,'*','</b><b>'))+'</b></row>')pro from #t1)a
outer apply (select C.v.value('.','nvarchar(100)') pro from a.pro.nodes('/row/b')C(v))b 
)
,cte1 as(
select name,left(pro,charindex('/',pro)-1)pro,convert(int,substring(pro,charindex('/',pro)+1,len(pro)))num from cte
)select a.*,isnull(b.num,0)bnum from #t2 a left join 
(select name,pro,sum(num)num from cte1 group by&nbs