Iseries SQL DBU将行展平为列

时间:2015-02-10 14:38:29

标签: sql ibm-midrange flatten

我有一台运行V5R4的iSeries服务器。我需要将一行压平成列。以下是数据的示例:

Sequence    Ordn        Ordl    Percentage
1           0140766       1          0
2           0140766       1         30
3           0140766       1          7
4           0140766       1          3 
1           0140766       2          0
2           0140766       2         30
3           0140766       2          2

顺序是应该计算百分比的顺序 Ordn是客户的订单号 Ordl是订单行号
百分比是列表价格的百分比列表

对于任何给定的订单行,行数(或百分比)可以从1到5不等。

该文件需要按订单编号分组,并先按订单行编号排序,然后按顺序排序。

我需要展平此文件,以便按以下方式显示:

Ordn    Ordl    Perc1   Perc2   Perc3   Perc4   Perc5
0140766   1       0       30      7       3      Null
0140766   2       0       30      2      Null    Null

有人可以帮忙吗?我尝试过几样东西,但没有任何方法可以按我想要的方式运行,而且我的SQL体验非常有限。

1 个答案:

答案 0 :(得分:1)

这是一种手动将数据转换为五个序列列的方法。它假设只有五种可能的序列。此外,如果您有多个具有给定序列的行,则百分比将一起添加。

select                                                            
  ordn                                                            
, ordl                                                            
, sum(case when sequence=1 then percentage else null end) as perc1
, sum(case when sequence=2 then percentage else null end) as perc2
, sum(case when sequence=3 then percentage else null end) as perc3
, sum(case when sequence=4 then percentage else null end) as perc4
, sum(case when sequence=5 then percentage else null end) as perc5
from yourtable                                              
group by ordn, ordl                                               
order by ordn, ordl       

(请注意,else null子句在此处并非绝对必要,因为null是缺少case案例的else表达式的默认值。)