mysql查询从同一个表中选择两列

时间:2015-06-18 09:54:06

标签: mysql shell

以下是我正在使用的示例表

表1

╔════╦══════════════╦══════╗
║ KID║  REV         ║ REDO ║
╠════╬══════════════╬══════╣
║  1 ║ 43453453345  ║  2   ║
║  1 ║ 2433423423   ║  1   ║
║  2 ║ 23423423     ║  1   ║
║  2 ║ 5566533      ║  2   ║
╚════╩══════════════╩══════╝

我需要使用 KID REDO 表1 中选择 REV 并输入表格2 以便我得到如下结果。

表2

╔════╦══════════════╦════════════╗ 
║ KID║  REDO1       ║  REDO2     ║
╠════╬══════════════╬════════════║ 
║  1 ║ 43453453345  ║2433423423  ║
║  2 ║ 23423423     ║   5566533  ║ 
╚════╩══════════════╩════════════╝

即所有 REV REDO = 1必须属于 REDO1 REV & #39; REDO = 2必须属于 REDO2 ,所有 KID 都不是唯一的。 如何使用普通的mysql实现这一点?请帮帮我

1 个答案:

答案 0 :(得分:2)

您可以使用以下查询生成所需的结果集:

SELECT KID, 
       MAX(CASE WHEN REDO = 1 THEN REV) AS REDO1, 
       MAX(CASE WHEN REDO = 2 THEN REV) AS REDO2
FROM Table1
GROUP BY KID

以上使用条件聚合,以便将REV值与REDO = 1值相关联的所有REDO1值放在REV输出字段下,并将{{ 1}}与REDO = 2输出字段

下的REDO2值相关联的值

如果要将上述结果插入Table2,可以使用INSERT INTO SELECT声明:

INSERT INTO Table2
SELECT KID, MAX(CASE WHEN REDO = 1 THEN REV END),
       MAX(CASE WHEN REDO = 2 THEN REV END) 
FROM Table1
GROUP BY KID;

Demo here