正在创建一个表以从退出表中透视和连接列?

问题描述 投票:0回答:1

我有一个表,用于存储他们创建的表单中的客户动态值。

该表称为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

感谢您的帮助。

sql sql-server tsql sql-server-2008-r2 pivot
1个回答
0
投票

假设您的[ID]列是唯一的,则可以将动态select语句与聚合函数(minmax)一起使用以返回一行中的所有行:

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

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.