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 に答える