1

SQL Server を使用して SSRS 2005 を使用しています。

私は2つのテーブルを持っています:

注文- 未発送の注文を含む

Order_History - クローズされた (出荷済みおよび請求済み) 注文が含まれます

を使用してUNION ALL両方のテーブルからデータを取得しています。ただし、値に「オープン」、「クローズ」、「両方」の複数値パラメーター OrderType を 1 つ追加して、ユーザーがオープンのみ、クローズのみ、または両方と言うことができるようにします。

データセット クエリ (テーブルが使用する) に IF または CASE を配置して、クエリが選択内容に応じて 1 つの select ステートメントのみを実行する方法はありますか?

つまり、次のようなものです。

"IF (@OrderType) = 'OPEN' select field a,b from Order; 
 ELSEIF (@OrderType) = 'CLOSED' then select field a,b from Order_History; 
 Else select field a,b from Order UNION ALL select field a,b from Order_History".  
4

1 に答える 1

0

UNION の両方の選択にそれぞれ「open」と「closed」を使用して列を追加し、その周りに外側のクエリを実行して、@orderType の case ステートメントで必要な値のみを選択できます。

SELECT *
FROM (
  SELECT *, 'open' AS STATUS
  FROM order
  UNION ALL
  SELECT *, 'closed'
  FROM Order_History
  ) a
WHERE STATUS = CASE 
    WHEN @OrderType = 'both' THEN STATUS
    ELSE @OrderType
    END;

sqlfiddle demo

于 2013-11-12T00:32:14.627 に答える