我的老板要求我将表转换为键值对。所以而不是
id a b c
1 a1 b1 c1
2 a2 b2 c2
3 a3 b3 c3
我们有
id col val
1 a a1
1 b b1
1 c c1
2 a a2
2 b b2
2 c c2
3 a a3
3 b b3
3 c c3
现在我的问题是是否可以编写一条SQL语句将后一个表转换回前一个表。我的猜测是这是不可能的。但如果我告诉我的老板,我会冒犯他吗?
MAX
将 val
列旋转为三个单独的列(a、b 和 c),具体取决于 col
列中的值:
CREATE TABLE transformed (
id INT,
col CHAR(1),
val VARCHAR(255)
);
INSERT INTO transformed (id, col, val) VALUES
(1, 'a', 'a1'),
(1, 'b', 'b1'),
(1, 'c', 'c1'),
(2, 'a', 'a2'),
(2, 'b', 'b2'),
(2, 'c', 'c2'),
(3, 'a', 'a3'),
(3, 'b', 'b3'),
(3, 'c', 'c3');
SELECT
id,
MAX(CASE WHEN col = 'a' THEN val END) AS a,
MAX(CASE WHEN col = 'b' THEN val END) AS b,
MAX(CASE WHEN col = 'c' THEN val END) AS c
FROM transformed
GROUP BY id;
输出:
id a b c
1 a1 b1 c1
2 a2 b2 c2
3 a3 b3 c3
尝试使用 SQL Fiddle。