[Help]有难度的左连接语句写法
A表
工号 姓名
01 小明
02 小红
......
B表
编号 工号 类型 天数 日期
1 01 请假 0.5 2007-6-1
2 01 请假 0.5 2007-6-1
3 01 休息 1 2007-6-1
4 01 出差 1 2007-7-1
5 02 请假 1 2007-6-1
......
请问如何写出以下查询结果:
工号 姓名 日期 请假 休息 出差
01 小明 2007-6-1 1 1 0
01 小明 2007-7-1 0 0 1
02 小红 2007-6-1 1 0 0
02 小红 2007-7-1 0 0 0
......
------解决方案--------------------select
A.工号,A.姓名,B.日期,
sum(case B.类型 when '请假 ' then B.天数 else 0 end) as 请假,
sum(case B.类型 when '休息 ' then B.天数 else 0 end) as 休息,
sum(case B.类型 when '出差 ' then B.天数 else 0 end) as 出差
from
A
left join
B
on
A.工号=B.工号
group by
A.工号,A.姓名,B.日期
------解决方案--------------------select 工号,姓名,日期,
sum(case 类型 when 请假 then 1 else 0 end) 请假,
sum(case 类型 when 休息 then 1 else 0 end) 休息,
sum(case 类型 when 出差 then 1 else 0 end) 出差
from A left join B on A.工号 = B.工号
group by A.工号,B.日期
------解决方案--------------------Select b.工号,a.姓名,b.日期,
请假=(Case when 类型= '请假 ' then 1 else 0 end),
休息=(Case when 类型= '休息 ' then 1 else 0 end),
出差=(Case when 类型= '出差 ' then 1 else 0 end)
from A表 as a Left Join B表 as b on a.工号=b.工号
------解决方案--------------------select
a.工号,
a.姓名,
b.日期,
请假=sum(case b.类型 when '请假 ' then b.天数 else 0 end),
休息=sum(case b.类型 when '休息 ' then b.天数 else 0 end),
出差=sum(case b.类型 when '出差 ' then b.天数 else 0 end)