Sql-Server

僅當所有子列包含相同的值時才選擇行

  • September 7, 2021

假設我有 3 列,Item、SubItem、Number。

我只想在所有子項的編號都為 0 時才選擇行。

例如在下表中,只應選擇 Phone 和 Pant,因為它們的所有子項的 number=0。

在此處輸入圖像描述

也不應返回重複的行。每個項目只應返回一行。

在此處輸入圖像描述

注意:還請標記 MySQL 的引擎和版本(如果您不是指 Microsoft SQL Server,則可以刪除 SQL Server 標記,這是該標記的用途)。您還應該包含更多資訊,例如表的定義(最好通過 DDL 語句)。

但是假設您的Number列是數值數據類型,那麼您可以在子查詢中GROUP BYItem列和SUM()Number來實現您想要的這樣:

SELECT Item, subItem, Number
FROM Table1
WHERE Item IN
(
   SELECT Item
   FROM Table1
   GROUP BY Item
   HAVING SUM(Number) = 0
) 

您還可以以更相關的方式重寫上述內容,這可能會產生更有效的查詢計劃,使用 anINNER JOIN代替,如下所示:

SELECT T1.Item, T1.subItem, T1.Number
FROM Table1 T1
INNER JOIN
(
   SELECT Item
   FROM Table1
   GROUP BY Item
   HAVING SUM(Number) = 0
) S
   ON T1.Item = S.Item
SELECT DISTINCT Item
FROM table t1
WHERE NOT EXISTS ( SELECT NULL
                  FROM table t2
                  WHERE t1.Item = t2.Item
                    AND t2.Number <> 0 );

所有另一列返回沒有意義。

引用自:https://dba.stackexchange.com/questions/299127