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 PIVOTGLOBAL 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