簡體   English   中英

如何檢查一組行中的至少一個是否具有特定值

[英]How to check if at least one of a group of rows has a specific value

我需要找到屬於某些條件的任何組的所有行。

我將一個組定義為在“組”列中共享一個值的幾行。
相關組必須包含至少一行且Eligible設置為true的行,並且在Group或Eligible以外的任何列中,組中的至少兩行必須彼此不同。

示例表

Group    LastName    FirstName   Eligible
==========================================
 1       Smith       John          True
 1       Smith       John          False
 2       Doe         Beth          True
 2       Doe         Jane          False
 2       Doe         Jane          False
 3       Ward        Bill          True
 4       Adams       Sally         True
 4       Grimes      Sally         True

所需結果

Group    LastName    FirstName   Eligible
==========================================
 2       Doe         Beth          True
 2       Doe         Jane          False
 2       Doe         Jane          False
 4       Adams       Sally         True
 4       Grimes      Sally         True

以下查詢使我接近

SELECT *
FROM ExampleTable
WHERE Group in 
    (SELECT Group
    FROM ExampleTable
    GROUP BY Group
    HAVING count(distinct LastName) > 1 or count(distinct FirstName) > 1)

問題在於它返回的結果太多,因為沒有考慮該組中的記錄之一是否被標記為合格。

我可能缺少一些簡單的東西,但我無法弄清楚如何檢查組中的一條記錄是否將Eligible設置為true,而不檢查所有記錄是否都設置為true。

您可以使用聚合邏輯來識別組:

SELECT Group
FROM ExampleTable
GROUP BY Group
HAVING (count(distinct LastName) > 1 or count(distinct FirstName) > 1)) AND
       MAX(eligible) = 'True';

注意:這假設eligible是字符串。 取決於類型和數據庫,關於合格的邏輯可以通過其他方式實現。

然后您的查詢基本上在那里:

SELECT et.*
FROM ExampleTable et
WHERE et.Group IN (SELECT Group
                   FROM ExampleTable
                   GROUP BY Group
                   HAVING (count(distinct LastName) > 1 or count(distinct FirstName) > 1)) AND
                          MAX(eligible) = 'True'
                  );

再添加一個條件,該條件將檢查該組是否至少有一個合格=真值。

SELECT *
FROM ExampleTable
WHERE Group in 
    (SELECT Group
    FROM ExampleTable
    GROUP BY Group
    HAVING (count(distinct LastName) > 1 or count(distinct FirstName) > 1) 
    and count(case when eligible='True' then 1 end) >= 1
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM