簡體   English   中英

我的 sql 查詢有什么問題(存在時的情況)

[英]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.

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