2013-12-12 50 views
0

逆透視多個指標列進2分不同的列並引入標籤爲兩列跟蹤列名

id value_a1 value_a2 value_a3 value_a4 value_b1 value_b2 value_b3 value_b4 

1  1   1   1   1   1   1   1  
2  1   1   1   1   1   1   1  
3  1   1   1   1   1   1   1   

目標

id value1 value1label value2 value2label 
1 1  value_a1  1  value_b1 
1 1  value_a2  1  value_b2 
1 1  value_a3  1  value_b3 
1 1  value_a4  1  value_b4 
2 1  value_a1  1  value_b1 
2 1  value_a2  1  value_b2 
2 1  value_a3  1  value_b3 
2 1  value_a4  1  value_b4 
3 1  value_a1  1  value_b1 
3 1  value_a2  1  value_b2 
3 1  value_a3  1  value_b3 
3 1  value_a4  1  value_b4 

我寫下的查詢:

SELECT ID value1, 
     value1label, 
     value2, 
     value2label, 
FROM 
    (SELECT id, 
      valuea1, 
      valuea2, 
      valuea3, 
      valuea4, 
      valueb1, 
      valueb2, 
      valueb3, 
      valueb4 
    FROM TABLE) P UNPIVOT (value1 
          FOR value1label IN (valuea1,valuea2,valuea3,valuea4))AS UNPVT UNPIVOT (value2 
                           FOR value2label IN (valueb1,valueb2,valueb3,valueb4))AS UNPVT1 

但問題是value1label和value2label與a1到b1不同步,並且在任何一個disaru上使用順序訂購。 如果我訂購value1label它從a1然後b1然後b2,b3等。

使用工會與在空值每個標籤結果以及這是不希望,因爲它增加行

數量逆轉置值

任何人都可以幫我這個

PS治療A1,A2,A3 ,a4作爲列標題的別名,用於value_a1,value_a2,value_a3,value_a4 爲簡單起見,我選擇這些值的情況與b1,b2,b3,b4 的情況相同。

+0

任何人都可以繞過它? – Egyptian

回答

0

您沒有指定正在使用的SQL Server版本,但可以使用CROSS APPLY而不是UNPIVOT來轉移數據對value_a1/value_b1

如果您正在使用SQL Server 2008+,那麼你可以使用帶有CROSS VALUES子句適用,但你也可以使用UNION ALL:

select id, value1, value1label, value2, value2label 
from yourtable 
cross apply 
(
    select value_a1, 'value_a1', value_b1, 'value_b1' union all 
    select value_a2, 'value_a2', value_b2, 'value_b2' union all 
    select value_a3, 'value_a3', value_b3, 'value_b3' union all 
    select value_a4, 'value_a4', value_b4, 'value_b4' 
) c (value1, value1label, value2, value2label); 

SQL Fiddle with Demo。這將您的數據放到您需要的相同行中:

| ID | VALUE1 | VALUE1LABEL | VALUE2 | VALUE2LABEL | 
|----|--------|-------------|--------|-------------| 
| 1 |  1 | value_a1 |  1 | value_b1 | 
| 1 |  1 | value_a2 |  1 | value_b2 | 
| 1 |  1 | value_a3 |  1 | value_b3 | 
| 1 |  1 | value_a4 |  1 | value_b4 | 
+0

啊這是有幫助的,但我做了其他的事情,至於SQL服務器版本,它是2008 R2 ...非常感謝您提供替代方案。 – Egyptian