我的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中完成,但我很难得到这个输出。
任何帮助都将受到高度赞赏!
答案 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语句,然后运行它。这很麻烦。如果可能的话,通常最好使用外部编程语言来做这样的事情。