首页 > 解决方案 > 将数据格式从行更改为列

问题描述

我有一个以下格式的 SQL 表。每个 ID 在特定日期的表中有 2 个条目。

Input:
ID  date    rownum  subid   value1  value2
A   200911  1       X       10      20
A   200911  2       Y       15      25
B   201001  2       S       60      35
B   201001  1       R       40      50

我想编写一个 SQL 查询将其更改为以下格式,以便每个 ID/日期组合只有 1 个条目,如下所示。rownum 已经包含在内,并且应该表示值,以便首先显示 rownnum 1,然后显示第二个 rownum 的值,如下所示。

输出:

ID  date   row1subid row1value1 row1value2 row2subid row2value1 row2value2
A   200911 X         10         20         Y         15         25
B   201001 R         40         50         S         60         35

如果有不清楚的地方,请告诉我。感谢你的帮助!

标签: sqlimpala

解决方案


这是您作为SQL Fiddle需要做的事情。

并供参考:

CREATE TABLE TestData
    ([ID] varchar(1), 
     [date] int, 
     [rownum] int, 
     [subid] varchar(1), 
     [value1] int, 
     [value2] int)
;
    
INSERT INTO TestData
    ([ID], [date], [rownum], [subid], [value1], [value2])
VALUES
    ('A', 200911, 1, 'X', 10, 20),
    ('A', 200911, 2, 'Y', 15, 25),
    ('B', 201001, 2, 'S', 60, 35),
    ('B', 201001, 1, 'R', 40, 50)
;


SELECT A.ID, A.date, A.rownum, A.subid, A.value1, A.value2, B.value1 AS r2value1, B.value2 AS r2value2
FROM TestData AS A
     INNER JOIN TestData B ON A.id = B.id AND B.rownum = 2
WHERE A.rownum = 1

推荐阅读