1

Azure SQLでいくつかの条件付きクエリを実行しようとしていますが、実行方法がまったくわかりません。私はこれらの2つのテーブルを持っています:

注文表

OrderID (PK)
...

OrderHistoryテーブル

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に関連付けられた行のいずれかにOrderStatus=2が含まれ、DisplayStringに%FINISHED%が含まれていない場合。次に2を返します
  3. O.OrderIdに関連付けられているすべてのOrderStatusの合計が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 に答える