两条记录之间的SQL检查链接(大小写、时间和时间)

两条记录之间的SQL检查链接(大小写、时间和时间),sql,oracle,plsql,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 请尝试以下查询: SELECT * FROM yo

我在表中有一些记录:

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
请尝试以下查询:

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);
这只返回A和D2


嗯。。。这个怎么样?但我现在在独立检查每个ID的关系时遇到了问题

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

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

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;

SUMCASE。统计与条件匹配的行数。>0只是表示至少存在一行。

您能给出更多不同类型链接的示例吗?结果应该是什么?我应该从服务地图手动创建服务之间的链接。例如,如果in ID是服务XZ1,则on ID必须是服务FU2。我有大约15-20个这样的链接。你能用一个例子发布预期的输出吗?预期的结果是显示给定ID的所有未链接服务。ID服务结果_LINK 2 a No 2 D2 NoGood!但服务名称中并不总是有+%。一个链接的服务可以是XYZ和ABC。我已经回答了您发布的确切问题。如果您试图在ABC和XYZ之间建立链接,这两个字符串没有任何共同点,那么您需要告诉我们如何可能知道存在任何关系。这种关系是由假设确定的。有人发明了若在任何ID上存在服务ABC,那个么也必须在这个ID上服务XYZ,若并没有,那个么对系统来说是错误的,现在我试图找到所有并没有关系的ID。