在SQL中自定义输出

时间:2012-11-14 08:15:53

标签: sql db2

我的SQL有一个小问题。

我有以下SQL输出

XSTOREATTR_ID    STORE_ID    STRINGVALUE    FLOATVALUE
  0               123          asdf           null
  0               124          awer           null
  1               123          null           20
  1               124          null           30

我希望我的sql输出为

XSTOREATTR_ID      123        124
  0                asdf       awer
  1                20          30

有人可以帮我一下吗?我知道它可以在Pivot中完成,但我很难得到这个输出。

任何帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分:0)

DB2在动态设置列名方面的作用非常有限:

如果STORE_ID只有几个不同的值,则可以创建硬编码查询:

with vals as (
    select xstoreattr_id,
           store_id,
           case when xstoreattri_id = 0
               then stringvalue
               else char(floatvalue)
           end as value
        from table
)
select xstoreattri_id,
       max(case when store_id=123 then value else null end) as 123,
       max(case when store_id=124 then value else null end) as 124
              --and so on...
    from vals
    group by xstoreattr_id

这不是很优雅,但它通常对快速任务很有用。

除此之外,如果您想坚持使用纯SQL解决方案,则需要使用dynamic SQL,其中包括在字符串中生成SQL语句,然后运行它。这很麻烦。如果可能的话,通常最好使用外部编程语言来做这样的事情。