一道sql表连接分组查询题,寻求通用的写法。
两张表,一张业绩表,一张部门表,要求横向以月为单位显示部门业绩
--创建Table1并填充数据(业绩表)
Create Table Table1(mon varchar(10),dep char(2),yj int)
Insert into  Table1(mon,dep,yj) Values('一月份','01',10)
Insert  into  Table1(mon,dep,yj) Values('一月份','02',10)
Insert into  Table1(mon,dep,yj) Values('一月份','03',5)
Insert into  Table1(mon,dep,yj) Values('二月份','02',8)
Insert into  Table1(mon,dep,yj) Values('二月份','04',9)
Insert into  Table1(mon,dep,yj) Values('三月份','03',8)
显示结果
select * From Table1
mon        dep  yj          
---------- ---- ----------- 
一月份        01   10
一月份        02   10
一月份        03   5
二月份        02   8
二月份        04   9
三月份        03   8
(所影响的行数为 6 行)
--创建Table2并填充数据(部门表)
Create Table Table2(dep char(2),dname varchar(20))
insert into table2(dep,dname) Values('01','国内业务一部')
insert into  table2(dep,dname) Values('02','国内业务二部')
insert into  table2(dep,dname) Values('03','国内业务三部')
insert into  table2(dep,dname) Values('04','国际业务部')
显示结果
dep  dname                
---- -------------------- 
01   国内业务一部
02   国内业务二部
03   国内业务三部
04   国际业务部
(所影响的行数为 4 行)要求查询处以下结果
部门编号 部门名称                 一月份    二月份   三月份         
----         --------------------      ----------- ----------- ----------- 
01          国内业务一部               10          0           0
02          国内业务二部               10          8           0
03          国内业务三部                5           0           8
04          国际业务部                    0           9           0操作sql语句
Select t1.dep as 部门编号, t1.dname 部门名称,
sum(case when t1.mon='一月份' then t1.yj else 0 end) as 一月份, 
sum(case when t1.mon='二月份' then t1.yj else 0 end) as 二月份,
sum(case when t1.mon='三月份' then t1.yj else 0 end) as 三月份
From 
(Select t1.dep,t2.dname,t1.mon,t1.yj From Table1  t1 Left join Table2 t2 on t1.dep=t2.dep) t1 
group by t1.dname,t1.dep
Order By t1.dep 
两张表,一张业绩表,一张部门表,要求横向以月为单位显示部门业绩
--创建Table1并填充数据(业绩表)
Create Table Table1(mon varchar(10),dep char(2),yj int)
Insert Table1(mon,dep,yj) Values('一月份','01',10)
Insert Table1(mon,dep,yj) Values('一月份','02',10)
Insert Table1(mon,dep,yj) Values('一月份','03',5)
Insert Table1(mon,dep,yj) Values('二月份','02',8)
Insert Table1(mon,dep,yj) Values('二月份','04',9)
Insert Table1(mon,dep,yj) Values('三月份','03',8)
显示结果
select * From Table1
mon        dep  yj          
---------- ---- ----------- 
一月份        01   10
一月份        02   10
一月份        03   5
二月份        02   8
二月份        04   9
三月份        03   8
(所影响的行数为 6 行)
--创建Table2并填充数据(部门表)
Create Table Table2(dep char(2),dname varchar(20))
insert table2(dep,dname) Values('01','国内业务一部')
insert table2(dep,dname) Values('02','国内业务二部')
insert table2(dep,dname) Values('03','国内业务三部')
insert table2(dep,dname) Values('04','国际业务部')
显示结果
dep  dname                
---- -------------------- 
01   国内业务一部
02   国内业务二部
03   国内业务三部
04   国际业务部
(所影响的行数为 4 行)要求查询处以下结果
部门编号 部门名称                 一月份    二月份   三月份         
----         --------------------      ----------- ----------- ----------- 
01          国内业务一部               10          0           0
02          国内业务二部               10          8           0
03          国内业务三部                5           0           8
04          国际业务部                    0           9           0操作sql语句
Select 部门编号=t1.dep, 部门名称=t1.dname,
一月份=sum(case when t1.mon='一月份' then t1.yj else 0 end), 
二月份=sum(case when t1.mon='二月份' then t1.yj else 0 end),
三月份=sum(case when t1.mon='三月份' then t1.yj else 0 end)
From 
(Select t1.dep,t2.dname,t1.mon,t1.yj From Table1 as t1 Left join Table2 as t2 on t1.dep=t2.dep) as t1 
group by t1.dname,t1.dep
Order By t1.dep疑问:如果有12个月难道要写12行月份吗?如果不是月份而是其他累积数字,那这么写就行不同了~!
寻求通用的写法~!