Lon*_*gat 4 sql oracle pivot join group-by
下面是表格:
关系表
| 西德 | PID |
|---|---|
| 101 | 第202章 |
| 第566章 | 第322章 |
| 第875章 | 第345章 |
人桌
| ID | 姓名 | 性别 |
|---|---|---|
| 101 | 里亚 | F |
| 第566章 | 安缦 | 中号 |
| 第202章 | 拉凯什 | 中号 |
| 第875章 | 幸运的 | 中号 |
| 第202章 | 瑞娜 | F |
| 第322章 | 雷娜 | F |
| 第345章 | 罗希特 | 中号 |
| 第322章 | 莫希特 | 中号 |
| 第345章 | 米娜 | F |
输出
| 孩子 | 母亲 | 父亲 |
|---|---|---|
| 里亚 | 瑞娜 | 拉凯什 |
| 安缦 | 雷娜 | 莫希特 |
| 幸运的 | 罗希特 | 米娜 |
我试过这个:
SELECT mother,
father
FROM (
SELECT id,
name,
sum(
CASE
WHEN gender = 'F' THEN 1
ELSE 0) AS mother,
sum (
CASE
WHEN gender = 'M' THEN 1
ELSE 0) AS father
FROM people
INNER JOIN relation
ON people. id = relation.p_id
GROUP BY id,
name) t1
INNER JOIN relation
ON relation.p_id = t1.id
Run Code Online (Sandbox Code Playgroud)
请让我知道查询,以了解如何获取此输出。上面的查询不起作用,我也无法弄清楚如何输出子项。
您必须加入relation2 个副本people。
第一份副本将返回孩子的姓名,第二份副本将返回父母的姓名。
然后按孩子分组并使用条件聚合来获取一行中父母的姓名:
SELECT c.name Child,
MAX(CASE WHEN p.gender = 'F' THEN p.name END) Mother,
MAX(CASE WHEN p.gender = 'M' THEN p.name END) Father
FROM relation r
INNER JOIN people c ON c.id = r.cid
INNER JOIN people p ON p.id = r.pid
GROUP BY r.cid, c.name;
Run Code Online (Sandbox Code Playgroud)
请参阅演示。