我需要根据某些条件执行一些动态操作临时表。 (根据数字添加列并仅更新这些列)
我有一个包含单位信息的主表 - E.G。
ID UNIT
1 kg
2 cm
3 mm
这里,行数可以变化。它可以包含3行或4行或2行。
现在我想基于此在临时表中创建一些列。
E.G。
如果主表有2个值,则#temp应包含2列作为unit1和unit2。 如果3个值则为unit1,unit2和unit3。
有可能吗?或者我是否需要直接在临时表中创建最大列数?
由于
答案 0 :(得分:1)
您必须在以下内容中使用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