【问题标题】:How to write SQL Pivot如何编写 SQL Pivot
【发布时间】:2021-01-25 18:26:33
【问题描述】:

我在尝试将列数据转换为行数据时遇到问题。这是表结构:

submission_id itemID, answerValue

每个提交有 21 行,提交 ID 相同,每行的 ItemID(question) 和 answervalue 都会发生变化。 所以一行看起来像这样 (abcd1234,7857,'YES') (abcd1234, 2226,'34 some Street)

我正在尝试使用提交 ID 创建一行,其中包含该提交 ID 的所有 itemid 和 answervalue。希望这是有道理的。

【问题讨论】:

  • 请提供样本数据和所需的输出

标签: sql tsql


【解决方案1】:

这是pivot的解决方案。

样本数据

我在示例数据中添加了另一个submissionId 以获得额外的结果行。

create table data
(
  submissionId nvarchar(8),
  itemId int,
  answerValue nvarchar(20)
);

insert into data (submissionId, itemId, answerValue) values
('abcd1234', 7857, 'YES'),
('abcd1234', 2226, '34 some Street'),
('abcd5678', 7857, 'NO'),
('abcd5678', 2226, '100 east lane');

解决方案

select piv.submissionId,
       [7857] as Question1,
       [2226] as Question2
from data d
pivot (max(d.answerValue) for d.itemId in ([7857], [2226])) piv;

结果

submissionId Question1 Question2
------------ --------- --------------
abcd1234     YES       34 some Street
abcd5678     NO        100 east lane

Fiddle 了解实际情况。

【讨论】:

    【解决方案2】:

    基本上,根据给定的数据,即如果问题具有相同的 ID,您可以使用 CASE 创建数据透视:

    SELECT submission_id, 
           (CASE WHEN itemID=7857 THEN answerValue END) AS Q7857,
           (CASE WHEN itemID=2226 THEN answerValue END) AS Q2226
           ...
    FROM table_name
    GROUP BY submission_id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2012-11-25
      相关资源
      最近更新 更多