下表如下:
关系表
| 苹果汁|PID|
| - ------|- ------|
| 一百零一|二百零二|
| 五百六十六|三二二|
| 八七五|三四五|
人员表
| 身份证|姓名|性别|
| - ------|- ------|- ------|
| 一百零一|里亚|F级|
| 五百六十六|阿曼|男|
| 二百零二|拉凯什|男|
| 八七五|幸运|男|
| 二百零二|雷纳|F级|
| 三二二|赖纳|F级|
| 三四五|罗希特|男|
| 三二二|莫希特|男|
| 三四五|米纳|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
请让我知道查询,为如何获取此输出。这上面的查询不工作,我无法计算如何输出孩子也。
8条答案
按热度按时间alen0pnh1#
必须将
relation
与people
的2个副本联接。第一个副本将返回孩子的名字,第二个副本将返回父母的名字。
然后按子级分组并使用条件聚合在一行中获取父级的名称:
请参见demo。
fnx2tebb2#
您可以加入两次,然后
PIVOT
:其中,对于示例数据:
输出:
| 儿童|父亲|母亲|
| - ------|- ------|- ------|
| 里亚|拉凯什|雷纳|
| 阿曼|莫希特|赖纳|
| 幸运|罗希特|米纳|
fdbelqdn3#
试试这个
x8goxv8g4#
您可以尝试以下查询-
xqnpmsa85#
unguejic6#
选择 * 自(选择 * 自(选择p.名作为子项,(从人员p1中选择p1.名,其中r.p_id=p1.id且p1.gender=“M”)作为父项从人员p内部连接关系rp.idr.id)t
其中t.father不为空)作为table1内部连接
(选择 * 从(选择p.名作为子项,(从人员p1中选择p1.名,其中r.p_id=p1.id且p1.gender =“F”)作为母亲从人员p中选择内部连接关系r,网址为p.id=r.id)t
其中T.Mother不为空)如表2
在表1.child上=表2.child
oipij1gg7#
iyr7buue8#
按子级名称的顺序分别在各个列中打印子级及其父级名称的查询。