数据合并查询问题
表table1
ljbz bzName
101 A级
102 B级
103 C级
104 D级
表table2
id Dname bzName WT
1 部门A D级 是
2 部门B C级 是
3 部门C A级 否
需要统计 部门完成的级别次数 条件WT=是算1次
统计成
DECLARE @t1 TABLE(ljbz INT ,bzName VARCHAR(10));
DECLARE @t2 TABLE(id int,Dname VARCHAR(10),bzname VARCHAR(10),wt VARCHAR(4));
INSERT INTO @t1 SELECT 101,'A级' UNION ALL
SELECT 102,'B级' UNION ALL
SELECT 103,'C级' UNION ALL
SELECT 104,'D级';
INSERT INTO @t2 SELECT 1,'部门A','D级','是'
UNION ALL SELECT 2,'部门B','C级','是'
UNION ALL SELECT 3,'部门C','A级','否';
SELECT [部门A-A级] as [部门A-A级],[部门A-B级] as [部门A-B级],[部门A-C级] as [部门A-C级],[部门A-D级] as [部门A-D级],[部门B-A级] as [部门B-A级],[部门B-B级] as [部门B-B级],[部门B-C级] as [部门B-C级],[部门B-D级] as [部门B-D级],[部门C-A级] as [部门C-A级],[部门C-B级] as [部门C-B级],[部门C-C级] as [部门C-C级],[部门C-D级] as [部门C-D级] FROM (
SELECT a.Dname+'-'+b.bzName AS NAME,CASE WHEN a.wt='是' AND a.bzname=b.bzName THEN 1 ELSE 0 END AS s FROM @t2 a FULL JOIN @t1 b ON 1=1 --ORDER BY a.Dname,b.bzname
) p PIVOT(SUM(s) FOR NAME IN ([部门A-A级],[部门A-B级],[部门A-C级],[部门A-D级],[部门B-A级],[部门B-B级],[部门B-C级],[部门B-D级],[部门C-A级],[部门C-B级],[部门C-C级],[部门C-D级])) pp
/*
建议用动态的
部门A-A级 部门A-B级 部门A-C级 部门A-D级 部门B-A级 部门B-B级 部门B-C级 部门B-D级 部门C-A级 部门C-B级 部门C-C级 部门C-D级
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
0 0 0 1 0 0 1 0 0 0 0 0
*/