具有条件语句的输出组Concat

时间:2014-04-23 13:12:42

标签: mysql sql

我有这样的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

如何制作,请帮助我。

1 个答案:

答案 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;

Updated SQL Fiddle

<强>参考

Related Question on SO