我有这两张表:
TableA:
aid ! name
--- ! -----
1 ! Paper
2 ! Rock
3 ! Sciz
Table B (aid is TableA FKEY)
id ! aid ! area ! mode
-- ! --- ! ----- ! ----
1 ! 1 ! 200 ! 1
2 ! 1 ! 240 ! 2
3 ! 2 ! 300 ! 1
4 ! 2 ! 290 ! 2
5 ! 3 ! 100 ! 1
6 ! 3 ! 110 ! 2
我想编写一个将返回以下结果的查询:
aid ! area(mode=1) ! area(mode=2)
--- ! ------------ ! ------------
1 ! 200 ! 240
2 ! 300 ! 290
3 ! 100 ! 110
如何在 mySQL 中完成此操作?我还需要排除表 B 仅包含模式 1 的值而不包含模式 2 的值的情况,反之亦然。
谢谢。
最佳答案
这是一个称为枢轴的过程。
并且可以结合使用 GROUP BY 和 MAX(CASE END)
子句来完成。
HAVING 子句确保 B.aid 具有包含 1 和 2 模式的两个记录。
SELECT
B.aid
, MAX(CASE WHEN B.mode = 1 WHEN B.area ELSE 0 END) AS 'area(mode=1)'
, MAX(CASE WHEN B.mode = 2 WHEN B.area ELSE 0 END) AS 'area(mode=2)'
FROM
B
GROUP BY
B.aid
HAVING
SUM(B.mode = 1) = 1
AND
SUM(B.mode = 2) = 1
ORDER BY
B.aid ASC
关于mysql - 在同一个表中的列设置的条件下,使用同一个表中的两个值进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49880399/