两个记录之间的SQL检查链接(CASE,WHEN和THEN)

时间:2018-08-09 06:10:43

标签: sql oracle plsql

我在表中有一些记录:

ID Services
2  A
2  C
2  C1
2  D2

我正在尝试进行查询,以选择服务之间的链接。

例如:如果对于ID 2,存在服务C,然后检查是否存在服务C1,则结果为是或否。

SELECT a. ID, a.service,
CASE 
    WHEN (a.service ='C') = (a.service  = 'C1') THEN 'Yes'
    ELSE 'No'
END      
FROM t1 a

3 个答案:

答案 0 :(得分:0)

尝试此查询:

SELECT *
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable t2
                  WHERE (t2.Services LIKE t1.Services + '%' OR
                         t1.Services LIKE t2.Services + '%') AND
                        t1.ID = t2.ID AND t1.Services <> t2.Services);

这仅返回AD2

Demo

答案 1 :(得分:0)

嗯...这是怎么回事?但是我现在在独立检查每个ID的关系时遇到问题...

SELECT a. ID, a.service,
CASE 
    WHEN a.service IN ('C','C1') THEN 'Yes'
    ELSE 'No'
END      
FROM t1 a

答案 2 :(得分:0)

如果我理解正确,则可以使用聚合:

SELECT ID,
       (CASE WHEN SUM(CASE WHEN service = 'C' THEN 1 ELSE 0 END) > 0 AND
                  SUM(CASE WHEN service = 'C1' THEN 1 ELSE 0 END) > 0 
             THEN 'Yes' ELSE 'No'
        END) as c_c1_flag
FROM t1
GROUP BY ID;

SUM(CASE . . . )对符合条件的行数进行计数。 > 0只是说至少存在一行。