I have a table like this ,
x
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
I want to check for Address with respect to X1 , POST is not occurred in X2 then I want to flag with the X1 value as Yes or No.
My output should look like,
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
Advertisement
Answer
One simple option would be to use aggregation to generate the flags you want, and then join back to your original table:
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;