我有一张这样的桌子
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
有人可以帮我吗?在此先感谢!
答案 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;