好的,我需要一個T-SQL這個專家。SQL查詢選擇計數= 0
我有一個名爲PackageStoreEvents的表,它有一個packageid,storecode和一個eventcode字段。我想返回storecode 2406的packageid值,其中eventcode = 6的計數爲0.
我該怎麼做?
我被困在這一個。
感謝您的幫助
好的,我需要一個T-SQL這個專家。SQL查詢選擇計數= 0
我有一個名爲PackageStoreEvents的表,它有一個packageid,storecode和一個eventcode字段。我想返回storecode 2406的packageid值,其中eventcode = 6的計數爲0.
我該怎麼做?
我被困在這一個。
感謝您的幫助
這不是非常漂亮,但應該工作。您在連接條件中將連接留在同一個表中,包括事件代碼,聲明右表沒有包含IS NULL
的行,然後執行DISTINCT以避免將以其他方式返回的許多行。
SELECT DISTINCT p1.packageid
FROM PackageStoreEvents p1
LEFT JOIN
PackageStoreEvents p2
ON p1.packageid = p2.packageid
AND p1.storecode = p2.storecode
AND p2.eventcode = 6
WHERE p2.packageid IS NULL
AND p1.storecode = 2406
也許這?:
SELECT PackageID
FROM PackageStoreEvents
WHERE Storecode = 2406 and EventCode = 6
GROUP BY PackageID
HAVING COUNT(EventCode) = 0
你打敗了我。唯一不同的是您返回的不必要的列。無論哪種方式,你都有我的投票。 – Kenneth 2010-06-04 13:21:12
這不起作用。您的WHERE子句將強制此查詢僅獲取EventCode等於6的行。然後,您的HAVING將過濾掉所有這些行。 – 2010-06-04 13:23:45
這不起作用。 WHERE和它們之間的HAVING將確保沒有行被返回。 – 2010-06-04 13:23:58
SELECT packageid
FROM
PackageStoreEvents p1
WHERE storecode = 2406
AND NOT EXISTS (SELECT * FROM PackageStoreEvents p2
WHERE p1.packageid = p2.packageid
AND p1.storecode = p2.storecode
AND p2.eventcode = 6)
假設我正確地理解這個問題,我會用的東西沿着這行:
-- PackageStoreEvents (packageid, storecode, eventcode)
SELECT DISTINCT packageid
FROM PackageStoreEvents r
WHERE storecode = 2406
AND NOT EXISTS (SELECT *
FROM PackageStoreEvents cnt
WHERE cnt.packageid = r.packageid
AND cnt.storecode = r.storecode
AND cnt.eventcode = 6)
嘗試:
select packageid
from PackageStoreEvents
where storecode = 2406
group by packageid
having sum(case eventcode when 6 then 1 else 0 end)=0;
用於單遍查詢。
+1我喜歡這個解決方案。 (順便說一句,我修正了它的代碼格式) – 2010-06-04 15:03:44
看起來對我來說是最有效的選擇。 – 2010-06-04 15:04:55
這將工作,但它絕對不是最好的方法。 – Kenneth 2010-06-04 13:21:44
+1作爲低音長號演奏者 – 2010-06-04 13:22:25
@Kenneth - 所以發佈一個更好的。這是迄今爲止唯一一個真正能夠工作的人。 – 2010-06-04 13:24:36