一个有一个表 “研究” 与列 “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