Sql 使用column_name函数取消打印表
我有一个表,它的列名称与我需要引用的值相同。我知道,如果我手动键入所有列名,我需要取消Pivot表并使其工作,但是此表不断向其中添加新列,因此我希望捕获取消Pivot中的所有列,而不是手动编写脚本 我可以使用column_name函数获取列名,我想知道这是否可以添加到unpivot中,我一直在玩它,现在看起来不可能,所以我想检查一下是否有其他建议 遗憾的是,我无法重新设计不断添加列名的表,尽管这是理想的解决方案Sql 使用column_name函数取消打印表,sql,sql-server,pivot,unpivot,Sql,Sql Server,Pivot,Unpivot,我有一个表,它的列名称与我需要引用的值相同。我知道,如果我手动键入所有列名,我需要取消Pivot表并使其工作,但是此表不断向其中添加新列,因此我希望捕获取消Pivot中的所有列,而不是手动编写脚本 我可以使用column_name函数获取列名,我想知道这是否可以添加到unpivot中,我一直在玩它,现在看起来不可能,所以我想检查一下是否有其他建议 遗憾的是,我无法重新设计不断添加列名的表,尽管这是理想的解决方案 select Day, Rota, RotaTemplate from table1
select Day, Rota, RotaTemplate
from table1 t1
unpivot
(
Rota
for RotaTemplate in (select Column_name
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'table1')
) unpiv;
你不允许这样做。您需要构建动态SQL语句,如下所示:
DECLARE @DynamicSQL NVARCHAR(MAX)
SET @DynamicSQL = N'select Day, Rota, RotaTemplate' + CHAR(10) +
'from table1 t1'+ CHAR(10) +
'unpivot' + CHAR(10) +
'(' + CHAR(10) + CHAR(9) +
'Rota for RotaTemplate in ('
+
STUFF
(
(
SELECT ',[' + [COLUMN_NAME] + '] '
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [TABLE_NAME] = 'table1'
FOR XML PATH('')
)
,1
,1
,''
)
+')' + CHAR(10) +
') unpiv;'
EXEC sp_executesql @DynamicSQL
感谢您的回复,我尝试了您的代码,我在Day列上遇到了一个错误。列“Day”的类型与UNPIVOT列表中指定的其他列的类型冲突。事实上,我发现了这个错误是由于我拉出的Day列是表中的一列,所以我刚刚在where子句中过滤掉了它,谢谢你的帮助