首页 > 解决方案 > SQL Server:从链接到另一个表的 ID 列动态创建列

问题描述

我正在尝试根据链接到另一个表的列名的 ID 动态创建列。(我不知道这是否可能用于网页上的 ssrs 报告和网格视图。)

看看下面的例子——“当前表”是它现在的样子。我对每个名字都有一个专栏。我已经创建了定义表。我想让当前表看起来像建议的表,并“创建”选择中的列或使用定义表的名称,使其看起来像现在一样。

在此处输入图像描述

标签: sqlsql-serversql-server-2008-r2

解决方案


这是一种在不实际使用动态 SQL 的情况下“动态”取消数据透视的方法。

显然 Gordon 的性能会更好,但在这里,您不必声明列。

例子

Select  D.id
       ,[count] = C.Value
       ,A.ts
 From  CurrentTable A
 Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
 Cross Apply (
                Select Item = a.value('local-name(.)','varchar(100)')
                      ,Value = a.value('.','int')    -- Use appropriate type
                 From  B.XMLData.nodes('/row')  as C1(n)
                 Cross Apply C1.n.nodes('./@*') as C2(a)
                 Where a.value('local-name(.)','varchar(100)') not in ('ts','OtherColToExclude')
             ) C
 Join   definition D on C.item=D.Name

退货

id  count   ts
1   5       2018-12-06
2   88      2018-11-01
2   18      2018-10-18
3   32      2018-10-27
4   6       2018-10-27

推荐阅读