SQL - 根据值将列动态添加到临时 table
SQL - Dynamically add columns to temp table based on value
我需要根据某些条件执行一些动态操作 temp table。
(根据数字添加列并仅更新这些列)
我有一个一一大师 table 其中包含单位信息 -
例如
ID UNIT
1 kg
2 cm
3 mm
此处,行数可以变化。它可以包含 3 行或 4 行或 2 行。
现在我想根据这个在我的临时 table 中创建一些列。
例如
如果 master table 有 2 个值,那么#temp 应该包含 2 列作为 unit1 和 unit2。
如果有 3 个值,则 unit1、unit2 和 unit3。
可能吗?还是我需要直接在 temp table?
中创建最大列数
谢谢
你必须在下面使用 Dynamic PIVOT
和 GLOBAL TEMP TABLE
:
IF OBJECT_ID('tempdb..#t') IS NOT NULL
DROP TABLE #t
GO
CREATE table #t
(id varchar(max),unit varchar(max))
insert into #t (id,unit)values
(1,'kg'),
(2,'cm'),
(3,'mm'),
(4,'m')
DECLARE @statement NVARCHAR(max)
,@columns NVARCHAR(max)
SELECT @columns = ISNULL(@columns + ',', '') + N'[' + cast(tbl.id as varchar(max)) + ']'
FROM (
SELECT DISTINCT id
FROM #t
) AS tbl
SELECT @statement = 'select *
INTO ##temp
from (
SELECT id,[unit]
FROM #t
) as s
PIVOT
(max(unit) FOR id in(' + @columns + ')) as pvt
'
EXEC sp_executesql @statement = @statement
SELECT * FROM ##temp
DROP TABLE ##temp
我需要根据某些条件执行一些动态操作 temp table。 (根据数字添加列并仅更新这些列)
我有一个一一大师 table 其中包含单位信息 - 例如
ID UNIT
1 kg
2 cm
3 mm
此处,行数可以变化。它可以包含 3 行或 4 行或 2 行。
现在我想根据这个在我的临时 table 中创建一些列。
例如
如果 master table 有 2 个值,那么#temp 应该包含 2 列作为 unit1 和 unit2。 如果有 3 个值,则 unit1、unit2 和 unit3。
可能吗?还是我需要直接在 temp table?
中创建最大列数谢谢
你必须在下面使用 Dynamic PIVOT
和 GLOBAL TEMP TABLE
:
IF OBJECT_ID('tempdb..#t') IS NOT NULL
DROP TABLE #t
GO
CREATE table #t
(id varchar(max),unit varchar(max))
insert into #t (id,unit)values
(1,'kg'),
(2,'cm'),
(3,'mm'),
(4,'m')
DECLARE @statement NVARCHAR(max)
,@columns NVARCHAR(max)
SELECT @columns = ISNULL(@columns + ',', '') + N'[' + cast(tbl.id as varchar(max)) + ']'
FROM (
SELECT DISTINCT id
FROM #t
) AS tbl
SELECT @statement = 'select *
INTO ##temp
from (
SELECT id,[unit]
FROM #t
) as s
PIVOT
(max(unit) FOR id in(' + @columns + ')) as pvt
'
EXEC sp_executesql @statement = @statement
SELECT * FROM ##temp
DROP TABLE ##temp