我是一個球迷與having
子句一起使用這種類型查詢的聚合。
SELECT mi.ITEMNO, mi.UNIT_PRICE, mi.EST_SERVINGS
FROM MENUITEM mi JOIN
SELECTEDITEM si
ON mi.ITEMNO = si.ITEMNO
GROUP BY mi.ITEMNO, mi.UNIT_PRICE, mi.EST_SERVINGS
HAVING SUM(CASE WHEN EVENTID = 2099 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN EVENTID = 2201 THEN 1 ELSE 0 END) = 0;
的having
子句中每個條件被計數的特定項被用於事件的次數。 > 0
表示該物品至少使用過一次。 = 0
表示該項目不顯示。所以第一個說該項目用於事件2099,第二個項目不用於2202.
我喜歡這種表達這些「set-set-set」查詢的方法,因爲它非常靈活。如果你想說應該包含事件2101,只需添加另一個子句:
HAVING SUM(CASE WHEN EVENTID = 2099 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN EVENTID = 2101 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN EVENTID = 2201 THEN 1 ELSE 0 END) = 0;
'... AND ITEMNO NOT IN(SELECT ITEMNO FROM SELECTEDITEM WHERE EVENTID = 2201)'? –
好的,謝謝!我以爲我已經嘗試過,但它現在正在工作!謝謝。 – tkess17
您使用的是SQL Server還是MySQL?請適當地標記你的問題。 –