一個有一個表 「研究」 與列 「ID」, 「代碼1」, 「代碼2」, 「SOC0」, 「SOC1」 ... 「SOCN」 ,其中n = 40。如何正確書寫UNPIVOT?
細胞的值不是此刻的重要,因爲我需要得到像「SOC」列的列表:
soc0
soc1
....
soc40
能否請你幫我寫了unpivot查詢?
一個有一個表 「研究」 與列 「ID」, 「代碼1」, 「代碼2」, 「SOC0」, 「SOC1」 ... 「SOCN」 ,其中n = 40。如何正確書寫UNPIVOT?
細胞的值不是此刻的重要,因爲我需要得到像「SOC」列的列表:
soc0
soc1
....
soc40
能否請你幫我寫了unpivot查詢?
select *
from research
unpivot (
CodeValue for CodeName in (code0, code1, code2)
) sub
可以使用UNPIVOT
函數來獲取此。
的基本語法是:
select *
from research
unpivot
(
value
for col in (soc0, soc1, soc40)
) un;
但你必須輸入了所有要unpivot的列名。如果你不想類型的所有列名,那麼你可以使用動態SQL:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot = stuff((select ','+quotename(C.column_name)
from information_schema.columns as C
where C.table_name = 'research' and
C.column_name like 'soc%'
for xml path('')), 1, 1, '')
set @query
= 'select id, col, value
from research
unpivot
(
value
for col in ('+ @colsunpivot +')
) u'
exec(@query)
但如果你只是想列名的列表,然後你就可以查詢這直接不逆透視:
select C.table_name, C.column_name
from information_schema.columns c
where C.table_name = 'research' and
C.column_name like 'soc%'
試試這個
select unpvt.value
from research c
unpivot (
value
for attribute in (Colsoc0,Colsoc1,Colsoc2,..,Colsocn)
) unpvt
此問題未顯示任何研究工作。 **做你的作業很重要**。告訴我們你發現了什麼,***爲什麼它不符合你的需求。這表明你已經花時間去嘗試幫助你自己了,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案。 [FAQ](http://stackoverflow.com/questions/how-to-ask)。 – Kermit
如果你只想列的名字,那麼你爲什麼要使用'UNPIVOT'表操作符呢?爲什麼不直接從'information_schema.columns'讀取這些列的名字? –
to FreshPrince - 我做了作業,所有主題都描述瞭如何轉換表格的值。但是,因爲我傷心,我只需要專欄來說明我的進一步行動。馬哈茂德的 - 我必須得到相同的結果。其中之一是與information_schema.columns和我做到了。另一個任務是使用unpivot函數得到結果。這就是我尋求幫助的原因。 – Almazini