使用SQL根据条件标记列

时间:2019-07-24 05:35:26

标签: mysql sql pivot

我有一张这样的桌子

Address  X1         X2    
ABC      RF_Error   PRE
ABC      RF_Error   PRE
DEF      WIFI       PRE
DEF      WIFI       PRE
DEF      WIFI       POST
HGI      RF_Error   PRE
ABC      SYS_INFO   PRE
ABC      SYS_INFO   POST

我想检查有关X1的地址,X2中没有发生POST,然后我想用X1值标记为Yes或No。

我的输出应该看起来像

Address  X1         X2     RF_ERROR   WIFI   SYS_INFO
ABC      RF_Error   PRE       YES
ABC      RF_Error   PRE       YES
DEF      WIFI       PRE                NO
DEF      WIFI       PRE                NO
DEF      WIFI       POST               NO
HGI      RF_Error   PRE       YES
ABC      SYS_INFO   PRE                          NO
ABC      SYS_INFO   POST                         NO

有人可以帮我吗?在此先感谢!

1 个答案:

答案 0 :(得分:1)

一个简单的选项是使用聚合来生成所需的标志,然后再联接回原始表:

SELECT
    t1.Address,
    t1.X1,
    t1.X2,
    t2.RF_ERROR,
    t2.WIFI,
    t2.SYS_INFO
FROM yourTable t1
INNER JOIN
(
    SELECT
        Address,
        X1,
        IF(COUNT(CASE WHEN X2 = 'POST' THEN 1 END) = 0, 'YES', '') AS RF_ERROR,
        IF(COUNT(CASE WHEN X1 = 'WIFI' THEN 1 END) > 0, 'NO', '') AS WIFI,
        IF(COUNT(CASE WHEN X1 = 'SYS_INFO' THEN 1 END) > 0, 'NO', '') AS SYS_INFO
    FROM yourTable
    GROUP BY Address, X1
) t2
    ON t1.Address = t2.Address AND t1.X1 = t2.X1
ORDER BY
    t1.Address;

enter image description here

Demo