[英]what is wrong with my sql query (case when exists)
我試圖了解case when exists
表達式的工作方式,有兩個表,其中一個是trOrderHeader
,它存儲有關任何訂單的主要信息。 另一個是trOrderLine
,它存儲有關訂單的詳細信息,並且有一個IsClosed
列,表示訂單以某種方式關閉(取消或完成)。
所以我的查詢在下面,我試圖用 IsClosed 列獲取 OrderLineID (我可以通過連接來做到這一點很容易,但我正在嘗試case when exists
)但所有 IsClosed 列都返回 1;
SELECT
OrderLineId,
IsClosed =
CASE
WHEN EXISTS (select * from trOrderHeader where IsClosed=1)
THEN 1
WHEN EXISTS (select * from trOrderHeader where IsClosed=0)
THEN 0
END
FROM
trOrderLine
GROUP BY OrderLineId
如果訂單已關閉,這不應該給我寫 1,如果訂單未關閉,請寫 0?
我是否誤解了case when exists
?
您需要關聯子查詢。 假設列OrderId
可用於關聯表,則:
SELECT
OrderLineId,
IsClosed =
CASE
WHEN EXISTS (select 1 from trOrderHeader h where h.IsClosed = 1 AND h.OrderId = l.OrderId)
THEN 1
WHEN EXISTS (select 1 from trOrderHeader h where IsClosed = 0 AND h.OrderId = l.OrderId)
THEN 0
END
FROM trOrderLine l
GROUP BY OrderLineId
但是,查詢的邏輯可以通過使用JOIN
和聚合 function 來計算狀態來簡化。 像這樣的東西可能是你需要的:
SELECT l.OrderLineId, MAX(h.isClosed) IsClosed
FROM trOrderLine l
INNER JOIN trOrderHeader h ON h.OrderId = l.OrderId
GROUP BY l.OrderLineId
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.