我有一个表,用于存储他们创建的表单中的客户动态值。
该表称为Dynamic_Fields_T,其格式如下:
ID | FIELD_NAME
1 | TANK
2 | PRODUCT TYPE
3 | ODOMETER
4 | RECEIPT #
这不能加入我们的票务表。
我需要这个看起来像这样:
ID_1 | ID_2 .......ID_N
TANK | PRODUCT_TYPE ......N
感谢您的帮助。
假设您的[ID]列是唯一的,则可以将动态select
语句与聚合函数(min
或max
)一起使用以返回一行中的所有行:
--create test table
create table #Dynamic_Fields_T (
[ID] INT
,[FIELD_NAME] varchar(max)
)
--populate test table
insert into #Dynamic_Fields_T
values
(1 ,'TANK')
,(2 ,'PRODUCT TYPE')
,(3 ,'ODOMETER')
,(4 ,'RECEIPT #')
declare @sql nvarchar(max) =''
--build dynamic columns
select
@sql = @sql + ',max(case when [ID] = ''' + cast([ID] as varchar) + ''' then [FIELD_NAME] end) as [ID_' + cast([ID] as varchar) + ' ] '
from
#Dynamic_Fields_T
--build dynamic query, remove unnecessary comma
select @sql = 'select ' + stuff(@sql, 1 , 1, '') + ' from #Dynamic_Fields_T'
--execute dynamic query
execute (@sql)
结果: