2011-12-19 73 views
0

可能重複:
dynamic sql pivot in sql server分組由列數據

我有一個表叫Col_values和Col_ID是一個標識字段中的數據是這樣的:

Val_ID  Col_ID  Value 
76951792  3   Closed 
76951791  3   Closed 
76951790  25   Open 
76951789  25   Closed 
76951792  1   US 
76951791  1   Canada 

和另一個表稱爲Et_Col,數據如下所示:

Col_ID Col_Name D_ID 
3  Status  1 
25  Status  2 
1  Country 1 

我想要的輸出:

Val_ID  Status Country 
76951792 Closed  US 
76951791 Closed  Canada 
76951790 Open  Null 
76951789 Closed  Null 

所以我寫了一個光標,以獲得輸出光標返回語句,如:

Select val_ID 
    ,max(case when Col_ID = 3 then Value end) as Status 
    ,max(case when Col_ID = 25 then Value end) as Status 
    ,max(CASE WHEN Col_ID = 1 THEN VALUE END) AS Country 
    From Col_values 
    Group by Val_ID 

這給了我輸出:

Val_ID Status Status Country 
76951792 Closed Null  US 
76951791 Closed Null  Canada 
76951789 Null  Closed Null 
76951790 Null  Open  Null 

我該如何解決這個問題?

+0

你知道術語標準化嗎? – 2011-12-19 17:51:41

+0

這可以通過動態數據透視表完成:http://stackoverflow.com/questions/8327261/dynamic-sql-pivot-in-sql-server – JeffO 2011-12-19 18:07:52

回答

1

應該可以改變你的光標,它會產生這樣的SQL,則:

select 
    val_id 
    ,max(case when Col_name = 'Status' then Value end) as Status 
    ,max(case when Col_name = 'Country' then Value end) as Country 
from 
    col_values v 
    join ET_Col c on v.col_id=c.col_id 

group by val_id 

不同的是,你正在使用的COL_NAME代替col_id列之間分割,所以漲了一倍列名稱將合併。

+0

我只是給了你一些樣本數據,但是大約有100個Col_ID。所以我不能寫SQl這就是爲什麼我寫了光標,它給了我我上面寫的select語句 – peter 2011-12-19 17:54:18

+0

我已經更新了。我想你可以很容易地根據你已經能夠生成的sql生成sql。 – 2011-12-19 18:11:28

1
select val_id, value as Status 
from col_values 

這就是你想要的產出。你爲什麼認爲你需要分組數據才能獲得?

+0

請看我編輯的問題。我已經在表格中添加了更多的示例數據。所以你可以看到爲什麼我將數據分組 – peter 2011-12-19 17:41:45

+0

樞軸是你尋找的關鍵詞:非常類似於http://stackoverflow.com/questions/1677645/using-pivot-in-sql-server-2008 – xQbert 2011-12-19 17:50:53