三个表T1、T2、T3,表1表示设备所属机构信息,t2表示设备采集数据实时信息, t3表示设备状态信息。
T1: 设备f1、f2属于A局,f3属于B局
F_ID, owner
f1 'A局'
f2 'A局'
f3 'B局'
T2: 设备 f1、f2、f3采集的实时数据均在T2表中存储,顺序和时间均可以不用理会
F_ID , Time , Value
f1 '2014-02-14' 100
f2 '2014-02-15' 200
f3 '2014-02-15' 200
f1 '2014-02-15' 100
f2 '2014-02-16' 200
f3 '2014-02-17' 300
f1 '2014-02-17' 100
T3表:表示设备的安装标志,如f1是A局中的新装设备,f2是A局中的既有设备,B局中则只有既有设备f3,如下:
F_ID , FALG
f1 '新装'
f2 '既有'
f3 '既有'
现在要根据机构统计各机构既有、新装设备指定时间段(如14号到17号)各自采集的数据的数据综合,输出要求如下:
机构(owner), 新装总量(sum(value)), 既有总量(sum(value))
A局 300 400
B局 null 500
想了很久不知道怎么写,有一气呵成的么?谢谢
先sum再行转列,使用关键字pivot
看看这个链接:http://www.cnblogs.com/peaceli/archive/2009/09/08/1561113.html
select a.owner,sum(case when c.flag='新装' then value else 0 end) as 新装总量,sum(case when c.flag='既有' then value else 0 end) as 既有总量 from T1 a ,T2 b,T3 c where a.f_id=b.f_id and a.f_id = c.f_id group by a.owner
select owner as 机构, sum(case when FALG='新装' then value else 0 end) as 新装总量, sum(case when FALG='既有' then value else 0 end) as 既有总量 from T1 join T2 on T1.F_ID=T2.F_ID Join T3 on T1.F_ID=T3.F_ID where Time between '2014-2-14' and '2014-2-17' group by owner 你T2中用的是flag吧,拼错了?