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