我有一个表,其中的列column_name_1,column_name_2,column_name_3且行值分别为0,0,1
column_name_1 , column_name_2 , column_name_3
--------------,----------------,---------------
0 , 0 , 1
我需要类似
的输出column_name_1 | 0
column_name_2 | 0
column_name_3 | 1
有可能吗?
我已经检查了一些明确的例子,那不完全是我的情况。
因为我需要在列值中添加列名,在列中添加一行。
名称,数学,科学,英语
Tilak,90、40、60
拉吉,30,20,10
更改为
名称,主题,标记
蒂拉克(Tilak),数学,90岁
蒂拉克(Tilak),科学,40岁
蒂拉克语,英语,60
很明显有一个视图,“名称”列保持原样。
2。SQL Query for generating matrix like output querying related table in SQL Server
上面的链接中还有“客户名称”列,该列保持不变。
但是在我的情况下,输入和输出的位置都不相同。
因此,即使仍然可以通过数据透视表实现,请帮助提供代码。
答案 0 :(得分:2)
很明显 UNPIVOT 会更好,但是如果您需要一种动态方法而不实际使用动态SQL
示例
Select C.*
From YourTable A
Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
Cross Apply (
Select Item = a.value('local-name(.)','varchar(100)')
,Value = a.value('.','varchar(max)')
From B.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./@*') as C2(a)
Where a.value('local-name(.)','varchar(100)') not in ('Columns','ToExclude')
) C
返回
Item Value
Column_name_1 0
column_name_2 0
column_name_3 1
答案 1 :(得分:1)
您想要APPLY
:
SELECT tt.cols, tt.colsvalue
FROM table t CROSS APPLY
( VALUES ([column_name_1], 'column_name_1'),
([column_name_2], 'column_name_2'),
([column_name_3], 'column_name_3')
) tt (colsvalue, cols);