读书人

数据合并查询有关问题

发布时间: 2013-01-11 11:57:35 作者: rapoo

数据合并查询问题
表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
*/



读书人网 >SQL Server

热点推荐