如何在SQLite中搜索相同ID但检测结果不同?

zdwk9cvp  于 2022-11-15  发布在  SQLite
关注(0)|答案(3)|浏览(190)

我的目标是编写一段代码来查找具有不同测试结果的相同ID。表1包含许多行,但我添加了这4行作为示例。我知道我的代码不正确,但获取此特定信息的正确方式是什么?(参见下面的预期目标)我希望我的问题有意义,但如果不清楚,请随时发表评论。
表1:
ID|TEST_RESULT|诊断
-|-|
2|肯定|X78
2|否定|U98
3|肯定|U98
4|NFEGATIVE|Y55
预期目标:
ID|TEST_RESULT|诊断
-|-|
2|肯定|X78
2|否定|U98
代码:

SELECT *
FROM table1
WHERE ID <> ' ' AND TEST_RESULT= NEGATIVE AND TEST_RESULT = POSITIVE;
bgibtngc

bgibtngc1#

您将需要一个子查询来计算每个ID有多少个POSITIVENEGATIVE结果,然后使用其结果进行筛选:

SELECT *
FROM Table1
WHERE id IN (
              SELECT ID
              FROM Table1
              GROUP BY ID
              HAVING SUM(CASE WHEN test_result = 'POSITIVE' THEN 1 ELSE 0 END) > 0
                     AND  
                     SUM(CASE WHEN test_result = 'NEGATIVE' THEN 1 ELSE 0 END) > 0   
             );

小提琴演示

0yycz8jy

0yycz8jy2#

只需使用EXISTS运算符检查表中是否存在具有相同id但不同test_result值的另一行。

SELECT
    *
FROM results r1
WHERE EXISTS (
    SELECT 1
    FROM results r2
    WHERE r1.id = r2.id AND r1.test_result != r2.test_result
)

输出
Id|test_Result|诊断
-|-|
2|肯定|X78
2|否定|U98

tquggr8v

tquggr8v3#

select   ID 
        ,TEST_RESULT    
        ,DIAGNOSIS
from    (
         select   *
                 ,min(TEST_RESULT) over w as mn
                 ,max(TEST_RESULT) over w as mx
         from     t
         window   w as (partition by ID)
        ) t
where    mn <> mx

ID|TEST_RESULT|诊断
-|-|
2|肯定|X78
2|否定|U98
Fiddle

相关问题