小编Mon*_*key的帖子

使用多列交叉应用动态 SQL 逆透视数据

微软 SQL Server Management Studio v18.8

我有一个表,其中有不同的列和列名称。我需要对数据进行逆透视,以便最终可以将其存储到另一个表中。不幸的是,这是一个过程,因为原始表格是从 Google 表格中提取的。

我在这里查找了几篇文章和答案,但无法成功复制其中任何一篇。我需要根据项目、时间戳和位置进行逆透视。那么 Q1、Q2、Q3 等应该不旋转。下面是一个示例表和查询,它将获得我想要的结果。任何在动态 SQL 中获取此信息以便将来添加/修改列的帮助将不胜感激。我愿意使用 UNPIVOT 或任何其他功能来获得所需的结果。实际的数据源将是永久表,而不是临时表。

创建表

DROP TABLE IF EXISTS #test
CREATE TABLE #test (Item VARCHAR(16), Timestamp DATETIME, Location VARCHAR(2), Q1 VARCHAR(3), Q2 VARCHAR(3), Q3 VARCHAR(3))
INSERT INTO #test VALUES('Stapler','2021-04-14 12:00:00.000', 'US','Yes','No','Yes'),
                        ('Paper','2021-04-10 16:00:00.000', 'CA','No','Yes','Yes'),
                        ('Pen','2021-04-06 15:00:00.000','MX','Yes','Yes','No')
Run Code Online (Sandbox Code Playgroud)

使用交叉应用取消透视

 SELECT A.Item,
           A.Timestamp,
           A.Location,
           B.*
      FROM #test AS A
    CROSS APPLY
    (
     VALUES ('Q1', A.Q1),
            ('Q2', A.Q2),
            ('Q3', A.Q3)
    ) B (Question,Answer)
Run Code Online (Sandbox Code Playgroud)

sql sql-server unpivot cross-apply

2
推荐指数
1
解决办法
1043
查看次数

标签 统计

cross-apply ×1

sql ×1

sql-server ×1

unpivot ×1