簡體   English   中英

選擇此ID的計數總和不為0的所有行

[英]SELECT all rows where sum of count for this id is not 0

我正在從Excel查詢Access數據庫。 我有一張與此表類似的表:

id    Product    Count
1        A         0
1        B         5
3        C         0
2        A         0
2        B         0
2        C         5
3        A         6
3        B         5
3        C         7

我要從中返回所有行(包括該產品的計數為0的行),其中該ID的計數總和不為0,並且乘積為A或B。因此,從上表中可以我會得到:

id    Product    Count
1        A         0
1        B         5
3        A         6
3        B         5

下面的查詢給出正確的輸出,但是速度很慢(從稍微小的7k行db中查詢時花了將近一分鍾),所以我想知道是否有一種更有效的方法。

SELECT *
FROM [BD$] BD
WHERE (BD.Product='A' or BD.Product='B') 
AND BD.ID IN (
  SELECT BD.ID
  FROM [BD$] BD
  WHERE (Product='A' or Product='B') 
  GROUP BY BD.ID
  HAVING SUM(BD.Count)<>0)

在子查詢中使用GROUP BY方法,然后使用INNER JOIN返回[BD$]表。

SELECT BD2.*
FROM
    (
        SELECT BD1.ID
        FROM [BD$] AS BD1
        WHERE BD1.Product IN ('A','B') 
        GROUP BY BD1.ID
        HAVING SUM(BD1.Count) > 0
    ) AS sub
    INNER JOIN [BD$] AS BD2
    ON sub.ID = BD2.ID;

IN()語句可能會執行很多次,您可以嘗試EXISTS():

SELECT * FROM [BD$] BD
WHERE BD.Product in('A','B') 
  AND EXISTS(SELECT 1 FROM [BD$] BD2
             WHERE BD.id = BD2.id 
             AND BD2.Product in('A','B') 
             AND BD2.Count > 0)

如果要查找ID計數總和為非零的記錄,則至少一個非唯一ID的計數必須為非零。

SELECT *
  FROM [BD$] BD
  WHERE BD.Product IN ('A', 'B') 
  AND BD.ID IN (
    SELECT DISTINCT b.ID
      FROM [BD$] b
      WHERE b.Product IN ('A', 'B') 
        AND b.Count<>0
    )

暫無
暫無

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

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