0

我对 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 中完成,但我正在努力获得这个输出。

任何帮助将不胜感激!!!

4

1 回答 1

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 解决方案,则需要使用动态 SQL,其中包括在字符串中创建 SQL 语句,然后运行它。这很乱。如果可能的话,通常最好使用外部编程语言来做这样的事情。

于 2012-11-14T09:58:04.613 回答