1

我试图在 Azure SQL 上做一些条件查询,但我完全不知道该怎么做。我有这两张表:

订单表

OrderID (PK)
...

订单历史表

OrderHistoryId (PK)
OrderId (FK)
DisplayString
OrderStatus

现在我想做的是将表 OrderHistory 加入到我的查询中,并根据针对 OrderHistory 的一些条件查询返回一个变量

SELECT O.OrderId, [...], Variable
FROM [Order] AS O

-- some code to get "Variable" from OrderHistory

ORDER BY O.OrderId DESC

OFFSET 0 ROWS
FETCH NEXT 200 ROWS ONLY

条件

  1. 如果与 O.OrderId 关联的任何行在 DisplayString 中包含 %FINISHED% 或 OrderStatus = 1;然后返回 1
  2. 如果与 O.OrderId 关联的任何行在 DisplayString 中包含 OrderStatus = 2 AND NOT %FINISHED%; 然后返回 2
  3. 如果与 O.OrderId 关联的所有 OrderStatus 的 SUM 等于 0;然后返回 3

结果

这就是我想要的结果:

OrderId    [...]    Variable
1           ...     1
2           ...     3
3           ...     2
4           ...     2
4

2 回答 2

1

用户案例语句根据您的 sql 的口味。

于 2012-07-05T07:54:11.227 回答
0

这个查询可能需要更多的工作,但它应该展示“案例”:

select Variable = case when b.DisplayString like 'FINISHED%' or b.OrderStatus = 1
                       then 1
                       else case when b.DisplayString not like 'FINISHED%' and b.OrderStatus = 2
                            then 2
                            else case when c.sumOsStatus = 0 then 3
                            end
                       end
                  end,
* 
from [Order] a
inner join OrderHistory b
    on a.OrderId = b.OrderId
inner join (select OrderId, sum(OrderStatus) sumOsStatus from OrderHistory group by OrderId) c
    on a.OrderId = c.OrderId
于 2012-07-05T15:42:21.910 回答