我有这样的SQL表:
Table A
NIP BIDANG MAYOR MINOR
1 A ZZ YY
2 A ZZ XX
2 A YY
我有另一张桌子:
Table B
NIP Keahlian Nilai
1 XX 2
1 YY 0
1 ZZ 3
2 XX 4
2 YY 2
2 ZZ 3
Table C
NIP Score Limit
1 10 15
2 20 15
基于该表,我想创建一个带有条件语句的表,如下所示: 如果socre< = limit,则比saran = xxx其他saran =来自市长未成年人的小组concat,但是按照表B中的coloumn Nilai中的高值排序。所以,输出如下:
NIP Saran
1 XXX
2 XX, ZZ, YY
如何制作,请帮助我。
答案 0 :(得分:0)
以下查询可获取所需的输出。您可以将ORDER BY与GROUP_CONCAT函数一起使用。此外,Limit是一个保留字,因此我将该列重命名为Limitx。请参阅此SQL Fiddle。
SELECT
NIP,
CASE SIGN(Score-Limitx)
WHEN -1 THEN 'XXX'
ELSE (SELECT GROUP_CONCAT(b.Keahlian ORDER BY b.Nilai DESC) FROM TableB b WHERE b.NIP = c.NIP)
END Saran
FROM
TableC c;
修改强>:
以下是修改后的查询,基于Keahlian必须存在于TableA的MAYOR或MINOR列中的要求:
SELECT
NIP,
CASE SIGN(Score-Limitx)
WHEN -1 THEN 'XXX'
ELSE (SELECT
GROUP_CONCAT(b.Keahlian ORDER BY b.Nilai DESC)
FROM TableB b
INNER JOIN
(SELECT NIP, MAYOR Keahlian
FROM TableA
UNION ALL
SELECT NIP, MINOR
FROM TableA
) TableA_list
ON TableA_list.NIP = b.NIP AND TableA_list.Keahlian = b.Keahlian
WHERE b.NIP = c.NIP
)
END Saran
FROM
TableC c;
<强>参考强>: