【问题标题】:Iseries SQL DBU Flatten Row into ColumnsIseries SQL DBU 将行展平为列
【发布时间】:2015-04-10 15:28:00
【问题描述】:

我有一台运行 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

Sequence 是计算百分比的顺序
Ordn 是客户的订单号
ordl 是订单行号
Percentage 是标价的百分比列表

对于任何给定的订单行,行数(或百分比)可以在 1 到 5 之间变化。

文件需要按订单号分组,先按订单行号排序,再按顺序排序。

我需要展平这个文件,以便它以下列方式显示:

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

有人可以帮忙吗?我尝试了几件事,但都没有按我想要的方式工作,而且我的 SQL 经验非常有限。

【问题讨论】:

    标签: sql ibm-midrange flatten


    【解决方案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 是缺少else 大小写的case 表达式的默认值。)

    【讨论】:

    • 效果很好!非常感谢您的帮助。
    猜你喜欢
    • 2021-06-25
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多