当前位置: 首页 > 知识库问答 >
问题:

T-SQL动态数据透视

穆浩皛
2023-03-14

好的,我有一张像这样的桌子

ItemID | ColumnName | Value
1      | name       | Peter
1      | phone      | 12345678
1      | email      | peter@host.com
2      | name       | John
2      | phone      | 87654321
2      | email      | john@host.com
3      | name       | Sarah
3      | phone      | 55667788
3      | email      | sarah@host.com

现在我需要把它变成这样:

ItemID | name  | phone    | email
1      | Peter | 12345678 | peter@host.com
2      | John  | 87654321 | john@host.com
3      | Sarah | 55667788 | sarah@host.com

我一直在查看动态枢轴示例,但似乎我无法将它们放入我的场景中。

有人能帮忙吗?

共有1个答案

东郭鸿福
2023-03-14

请看下面的示例

CREATE TABLE #Table (
        ID INT,
        ColumnName VARCHAR(250),
        Value VARCHAR(250)
)

INSERT INTO #Table SELECT 1,'name','Peter' 
INSERT INTO #Table SELECT 1,'phone','12345678' 
INSERT INTO #Table SELECT 1,'email','peter@host.com' 
INSERT INTO #Table SELECT 2,'name','John' 
INSERT INTO #Table SELECT 2,'phone','87654321' 
INSERT INTO #Table SELECT 2,'email','john@host.com' 
INSERT INTO #Table SELECT 3,'name','Sarah' 
INSERT INTO #Table SELECT 3,'phone','55667788' 
INSERT INTO #Table SELECT 3,'email','sarah@host.com' 

---I assumed your tablename as TESTTABLE--- 
DECLARE @cols NVARCHAR(2000) 
DECLARE @query NVARCHAR(4000) 

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT 
                                '],[' + t.ColumnName 
                        FROM    #Table AS t 
                        --ORDER BY '],[' + t.ID 
                        FOR XML PATH('') 
                      ), 1, 2, '') + ']' 

SELECT  @cols

SET @query = N'SELECT ID,'+ @cols +' FROM 
(SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p 
PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) 
AS pvt;' 

EXECUTE(@query)

DROP TABLE #Table
 类似资料:
  • 问题内容: 我已经尽力理解如何在SQL中创建数据透视表,但是我无法对其进行管理! 我有以下几列: 拥有60万行数据。 我在下面的数据透视表中需要它们; StartHour作为列标题 作为行标题 作为数据 其中=‘1’作为过滤器。 数据透视表 我设法获得了以下代码,该方法有效,但仅给我date_1作为列标题,而不给我StartHour,或者将filter作为date_source =‘1’。 谢谢你

  • 问题内容: 我找到了一个不错的脚本,该脚本可以为透视表动态按列名创建,但是我没有将分配的值重新返回到表中。这是我的出发桌。 我运行此SQL生成我想要的数据透视表中的列 这给了我以下输出 当我为数据透视表运行动态SQL时 我看到这个结果… 我尝试了几种不同的方法,但是对于这种方法为什么不起作用,我没有提出解决方案。 所需的输出将是ORDER_ID列顺序正确的位置 但这也将对我的应用程序起作用。 问题

  • 问题内容: …枢轴((X)中B的总和(A)) 现在,B的数据类型为varchar2,X为一串由逗号分隔的varchar2值。 X的值是从同一表的列(例如CL)中选择不同的值。这种枢轴查询工作的方式。 但是问题是,每当CL列中有一个新值时,我都必须手动将其添加到字符串X中。 我尝试用从CL选择不同的值替换X。但是查询未运行。 我感觉到的原因是因为要替换X,我们需要用逗号分隔的值。 然后,我创建了一个

  • 问题内容: 嗨,我正在尝试在SQL Server下表中进行数据透视 我希望输出为 原始表中的列数是已知的,但行数是未知的。谁能帮忙 问题答案: 如果要将数字包括在列名中,则仍然需要先取消透视和列,然后再应用透视。所不同的是,您会将数字连接到在取消透视过程中创建的列名。 对于已知数量的值,查询将为: 然后,如果您有未知的数字,则动态SQL版本将为:

  • 问题内容: 好吧,我有一张看起来像这样的表 现在,我需要将其转换为: 我一直在看动态透视图示例,但是我似乎无法使其适合我的情况。 有人可以帮忙吗? 问题答案: 看下面的例子

  • 问题内容: 这是数据的一小部分。在实际数据中,“名称”和“代码”下的值有数百个,并且这些值经常更改。因此,对Pivot语句进行硬编码将不起作用。需要创建一个动态SQL语句- 我需要帮助。 样本数据集看起来像这样[再次,这只是一个小样本]: 请注意,代码值(例如A-One,A-Two和B-One)可能与一个以上的Name值相关联。 例如,A-One与名称A-1以及名称C一起出现。 我想输出它,使其看