我想将动态数据透视表的结果添加到另一个表中(以我的Q为基础)。列名是动态的,因此事先未知,因此结果无法读取到表变量等中。
例如,枢轴可能会产生如下结果:
EXEC sp_executesql @Query -- INTO @Result
ID | R1 | R2
---+----+----
1 | 50 | 3
2 | 9 | 7
3 | 38 | 21
我想与其他数据列结合在一起
SELECT *
FROM @Result r
JOIN Table t
ON r.ID = t.ID
ID | R1 | R2 | T1
---+----+----+----
1 | 50 | 3 | 40
2 | 9 | 7 | 1
3 | 38 | 21 | 12
使用SQL Server甚至可以进行这类查询吗?公平地说,列名并不是完全未知的,它们会以[R1],[R2]...
这是可以玩的东西。这将分别产生两个示例结果集。
DECLARE @Columns nvarchar(MAX) = '[R1],[R2]';
DECLARE @Query nvarchar(MAX);
SET @Query = N'SELECT * FROM (VALUES (1, 50, 3), (2, 9, 7), (3, 38, 21)) AS X(ID, R1, R2)';
DECLARE @Table table (ID int unique not null, T1 int null)
INSERT INTO @Table (ID, T1) VALUES
(1, 40), (2, 1), (3, 12);
SELECT @Columns;
EXEC sp_executesql @Query;
SELECT * FROM @Table;
答案 0 :(得分:0)
将sp_executesql查询的结果插入到临时表中,然后将其加入。
EXEC sp_executesql N'SELECT * INTO ##tmp FROM MyTable'
SELECT * FROM ##tmp
答案 1 :(得分:0)
将查询完全移动到动态SQL中可以产生很好的解决方案。使用下面或类似的例程,但是定义了要在联接中使用的表,然后可以传入列名。
DECLARE @Columns nvarchar(MAX) = '[R1],[R2]';
DECLARE @Query nvarchar(MAX);
SET @Query = N'
DECLARE @Table table (ID int unique not null, T1 int null)
INSERT INTO @Table (ID, T1) VALUES
(1, 40), (2, 1), (3, 12);
SELECT X.ID, t.T1, ' + @Columns + '
FROM (VALUES (1, 50, 3), (2, 9, 7), (3, 38, 21)) AS X(ID, R1, R2)
JOIN @Table t
ON t.ID = X.ID
';
EXEC sp_executesql @Query;