【问题标题】:db2, group data so that results can be column namesdb2,分组数据,以便结果可以是列名
【发布时间】:2020-03-10 16:03:25
【问题描述】:

我有一个相当简单的查询,它返回一个结果集,我不仅想对它进行分组和计数,而且还想将结果转换为列名(这是在 db2 中)

    select t1.user,t2.category,t2.color,t2.store_number  
    from table1 t1
    inner join table2 t2 
    ON t1.store_number = t2.store_number;

返回:

    user | category  |  color  |  store_number
    --------------------------------------------
    12      A           'blue'      123             
    12      A           'blue'      123
    12      A           'blue'      456
    12      A           'blue'      456
    12      A           'blue'      456
    12      A           'blue'      123
    12      A           'blue'      123
    12      A           'blue'      456
    12      A           'blue'      123
    12      A           'blue'      789

从技术上讲,这将导致:

    user | store_number | count
    ------------------------------
    12        123           5
    12        456           4
    12        789           1

但是我怎样才能把查询结果变成这样:

    user | 123  |  456  |  789
    ---------------------------
    12      5       4        1

所以商店编号是列名,计数是数据。我怎样才能正确地做到这一点?

【问题讨论】:

    标签: sql db2-400


    【解决方案1】:

    我认为 DB2 没有枢轴功能。您将需要使用案例语句和聚合。比如:

        select
        user,
        count (case when store_number = 123 then color else null end) as store_123,
        ...
    group by user
    

    【讨论】:

    • 这可行,但我有一个问题。如果没有我的加入,我会得到 4 行我需要的数据,但是商店编号的加入会增加它。我该怎么做才能得到这个计数,但仍然只能从原始表中得到 4 行?
    • 不确定我是否完全理解,但请尝试使用count (distinct ...) 而不是count
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多