首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

数据合并查询有关问题

2013-01-11 
数据合并查询问题表table1ljbzbzName101A级102B级103C级104D级表table2idDnamebzNameWT1部门AD级是2部门BC

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



热点排行