2012-11-14 61 views
0

我有一個SQL小問題。自定義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

請詳細說明因爲我在示例中找不到邏輯模式 – Jester

+1

除了處理接受率,發佈一些工作查詢,如果結果不正確,無所謂,是一個起點,也許你是離解決方案不遠。也給一些測試數據。您可以使用[SQL提琴在線工具](http://sqlfiddle.com/#!3)提供所有這些信息。 – Yaroslav

+0

@JoeGJoseph - 你能提出一些問題的建議嗎?是的,我已根據您的請求接受了幾個回答的問題 –

回答

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語句,然後運行它。這很混亂。如果可能的話,通常最好使用外部編程語言來做這樣的事情。

+0

Hi dan ,你的查詢可以給我預期的輸出,但有1200 xstoreattr ID,我不能硬編碼。有沒有其他的方式相同? –

+0

@arvind_cool,在這種情況下,我不確定我是否真的瞭解您的問題。你的意思是你的源表中有1200個不同的列,比如'STRINGVALUE','FLOATVALUE'等等?或者你的意思是1200'STORE_ID'值?無論哪種情況,擁有如此寬闊的桌子都不是一個好設計。也許如果你更新你的問題來解釋你正在嘗試解決的問題,我們可以幫助你提供更好的解決方案。 – dan1111

+0

嗨Dan,我們有1200個不同值的STRINGVALUE,FLOATVALUE和INTEGERVALUE列的組合,但store_id具有大約50個不同值的組合。 –