您好我遇到了一个问题,我在尝试总结动态数据透视表上的特定列。
例如
employee_number last_name first_name salary State dept_id
12009 Gibson Graham 54000 KZN 45
34974 Parker Fred 80000 KZN 45
34987 Erickson Neil 42000 GP 45
45001 Yates Sally 57500 NC 30
75623 Gates Steve 65000 GP 30
64421 Arthur Barron 18000 GP 30
74454 James Marther 14555 GP 25
21554 Sally Hanson 77500 KZN 20
22132 Malcolm Mabuna 45000 KZN 20
我正在寻找的是能够输出每个州的工资总和和每个dept_id的列。 dept_id需要是动态的,因为我可以在一个查询中获得10个dept_id,在下一个查询中获得25个dept_id。这一切都很好。
我正在努力弄清楚的是我还需要一个专栏,基本上说如果dept_id 10,11,15,20和30的工资总和超过100,000,那么其他是0.我想到的只是简单地创建轮回数据并添加列。但是,正如您在此示例中所看到的,有时没有dept_id 10,11或15.当发生这种情况时,它必须将dept_id 20和30的工资加起来。所以我需要一种方法:
State dept_id_20 dept_id_25 dept_id_30 dept_id_45 Sum Result GP 0 14555 83000 42000 0 0 KZN 122500 0 0 134000 122500 1 NC 0 0 57500 0 0 0
非常感谢帮助!
答案 0 :(得分:1)
我选择使用不同的方法来解决问题。有一个可能的dept_ids的有限列表。所以我使用了类似的代码:
select state,
sum(dept_id_10),
sum(dept_id_11),
sum(dept_id_12),
...
sum(dept_id_12),
case when sum(dept_id_10) + sum(dept_id_11) + sum(dept_id_15)
+ sum(dept_id_20) + sum(dept_id_30) > 100000 then 1 else 0) end as Result
from (
select state,
case when dept_id = 10 then salary else 0 end as dept_id_10,
case when dept_id = 11 then salary else 0 end as dept_id_11,
case when dept_id = 12 then salary else 0 end as dept_id_12,
case when dept_id = 13 then salary else 0 end as dept_id_13,
...
case when dept_id = 45 then salary else 0 end as dept_id_45
from data)
group by state