在SQL中自定义输出

在SQL中自定义输出,sql,db2,Sql,Db2,我对SQL有一个小问题 我有下面的SQL输出 XSTOREATTR_ID STORE_ID STRINGVALUE FLOATVALUE 0 123 asdf null 0 124 awer null 1 123 null 20 1 124

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


任何帮助都将不胜感激

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

如果对
存储\u 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语句,然后运行它。这太乱了。如果可能的话,通常最好使用外部编程语言来做类似的事情。

请详细说明结果,因为我在示例中找不到逻辑模式,除了处理验收率,发布一些工作查询,不管结果是否错误,这是一个起点,也许你离解决方案不远了。并给出了一些测试数据。您可以使用提供所有这些信息。@JoeGJoseph-您能为这些问题提供建议吗?是的,根据你的回答,我已经接受了一些问题request@Jester-如果您观察结果,对于xstoreattr_id为0,并且对于不同的storeid具有不同的字符串值,对于xstoreattr_id为1Hi dan,具有不同的浮点值,您的查询可以提供预期的输出,但有1200个xstoreattr ID,我无法硬编码。“还有其他方法吗?”阿尔文杜酷,如果是这样的话,我不确定我是否真的理解你的问题。您的意思是在源表中有1200个不同的列,如
STRINGVALUE
FLOATVALUE
,等等?或者你的意思是1200
存储ID
值?在这两种情况下,有这么宽的桌子真的不是一个好的设计。也许如果您更新您的问题以解释您试图解决的问题,我们可以帮助您找到更好的解决方案。嗨,丹,我们有1200个不同值的STRINGVALUE、FLOATVALUE和INTEGERVALUE列的组合,但store\u id有大约50个不同值的组合。@arvind\u cool,所以你只有一个额外的专栏?您可以通过在
with(…)
子句内的
case
语句中添加一个额外的case来解决这个问题。然后,在主select语句中只需要50行,每个
store\u id
的值对应一行。