【问题标题】:Creating a TABLE to pivot and concat columns from exiting table?创建一个表来从现有表中透视和连接列?
【发布时间】:2020-06-18 05:14:09
【问题描述】:

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

表格名为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,但您不会在 inside 视图中构建这样的查询。
  • 您为什么使用不受支持的 SQL Server 版本?
  • 好吧,我完全是新手,并且得到了一个项目....也许动态 SQL 是我需要的,而不是视图。我只需要这个表 Pivoted...我没有选择使用 SQL 2008,它是我公司使用的。我宁愿使用 MYSQL

标签: sql sql-server tsql sql-server-2008-r2 pivot


【解决方案1】:

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

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

结果:

【讨论】:

  • 正是我在寻找的东西,根据我的问题,你回答得非常好......我希望为字段名称提供动态,并且客户根据他们的需要做不同的表格..所以一个客户可能有 id_1 作为坦克,但另一个可能有 ID_1 = 总加仑。这无疑给了我我正在寻找的结构......第二部分有什么帮助吗?
  • 没关系....我意识到第二部分是答案....你的天赐之物!!!
猜你喜欢
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 2021-07-10
相关资源
最近更新 更多