例如原始表格是这样:
test ID dep leixing other 1 A 类型1 asdfs 2 A 类型1 fawef 3 B 类型2 aewf 4 B 类型3 fasdf 5 A 类型2 sf 6 A 类型3 af 7 A 类型3 awef
想生成一张这样的表:
dep l1 l2 l3 A 2 1 2 B 0 1 1
第一行:
第一列是原表的dep A,第二列是原表dep为A的记录中,leixing这一列是”类型1″的记录的数量。
同理第一行第三列是 原表dep为A的记录中,leixing这一列是”类型2″的记录的数量。
第二行:
第二行第二列,是原表dep为B的记录中,leixing这一列是”类型1″的记录的数量。
第二行第三列,是原表dep为B的记录中,leixing这一列是”类型2″的记录的数量。
有什么简单的方法吗?本人本人想了一个,是这样的,但是感觉很复杂。
with a as (select dep,leixing,count(*) as lxcount from test group by dep,leixing) select dep,sum( case leixing when "类型1" then lxcount else 0 end)l1, sum( case leixing when "类型2" then lxcount else 0 end)l2, sum( case leixing when "类型3" then lxcount else 0 end)l3 from a group by dep
解决方案
20
select dep,sum(case type when 1 then 1 else 0 end) as T1, sum(case type when 2 then 1 else 0 end)as T2, sum(case type when 3 then 1 else 0 end)ass T3 from type group by dep;
20
select dep,sum( case leixing when "类型1" then 1 else 0 end)l1, sum( case leixing when "类型2" then 1 else 0 end)l2, sum( case leixing when "类型3" then 1 else 0 end)l3 from a group by dep