sql - 如何将列名动态传递给 SQL 中的 unpivot 函数?
问题描述
我们有一个列名列表,每个月都会不断添加。我希望下面的代码动态捕获列名(在 unpivot 函数中):
DROP TABLE IF EXISTS [Commodity-Wise].[dbo].[temp]
SELECT * INTO [Commodity-Wise].[dbo].[temp]
FROM
(SELECT [HS_CODE]
,[DESCRIPTION]
,[TYPE]
,[CURRENCY]
,[FINANCIAL YEAR]
,[VALUE]
FROM [Commodity-Wise].[dbo].[Import_Export_INR_USD_15_19]
UNPIVOT
(
[VALUE] for [FINANCIAL YEAR] IN
(APR-15 Value
,MAY-15 Value
,JUN-15 Value
,JUL-15 Value)
)a)b
我试过复制下面的代码:
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Import_Export_INR_USD_15_19'
AND COLUMN_NAME LIKE '%Value%'
在上面的“UNPIVOT”函数中,但它不起作用。有什么建议么?
解决方案
请尝试以下内容
use [AdventureWorks2019]
go
CREATE TABLE pvt (VendorID INT, Emp1 INT, Emp2 INT,
Emp3 INT, Emp4 INT, Emp5 INT, Emp6 INT);
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4,5);
INSERT INTO pvt VALUES (2,4,1,5,5,5,7);
INSERT INTO pvt VALUES (3,4,3,5,4,4,9);
INSERT INTO pvt VALUES (4,4,2,5,5,4,0);
INSERT INTO pvt VALUES (5,5,1,5,5,5,1);
GO
Declare @Columns VARCHAR(100)='', @Dynamic VARCHAR(MAX)=''
SELECT @Columns = @Columns + ',' + [Name] FROM SYS.COLUMNS WHERE OBJECT_ID = OBJECT_ID('[dbo].[pvt]')
AND [Name] Like 'Emp%'
SET @Columns = STUFF(@Columns,1,1,'')
SET @Dynamic ='
SELECT VendorID, Employee, Orders
FROM
(SELECT VendorID, ' + @Columns + '
FROM pvt) p
UNPIVOT
(Orders FOR Employee IN
(' + @Columns +')
)AS unpvt;'
EXEC(@Dynamic)
推荐阅读
- android - Flutter:尝试在 AppCenter 中构建时出现 appcenter:verifyReleaseResources 错误
- c# - 如何在文件夹中找到所有可编写脚本的对象,然后从其中加载一个变量?
- c# - 第一次请求后检测到 ChromeDriver
- laravel - Laravel 中的广播和 websocket 问题
- pandas - 使用熊猫列颜色设置颜色
- proxy - 测试带有客户端错误的 Grafana 仪表板:407
- swift - Swift:上传到服务器时加密文件内容并打开它
- python - pyqtgraph鼠标交互:使用鼠标右键或中键缩放到选中框
- android - 有没有办法从Android图像中提取自动标签
- reactjs - 不能改变背景颜色