我的 sql 查询有什么问题(存在时的情况)

what is wrong with my sql query (case when exists)

我试图了解 case when exists 表达式的工作原理,有两个表,一个是 trOrderHeader,它存储有关任何订单的主要信息。另一个是 trOrderLine,它存储有关订单的详细信息,并且有一列 IsClosed 指示订单以某种方式关闭(取消或完成)。

所以我的查询在下面,我试图用 IsClosed 列获取 OrderLineID(我可以通过连接来做到这一点很容易,但我正在尝试 case when exists 表达式)但是所有 IsClosed 列 returns 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 和聚合函数来计算状态来简化。您可能需要这样的东西:

SELECT l.OrderLineId, MAX(h.isClosed) IsClosed
FROM trOrderLine l
INNER JOIN trOrderHeader h ON h.OrderId = l.OrderId
GROUP BY l.OrderLineId