2

私は次のような簡単なクエリを持っています:

SELECT * FROM orders

簡単にすべての注文を返します。

クエリにオプションのパラメータを追加したいと思います。

DECLARE @group INT;
SET @group = 1 --IT1

SELECT * FROM orders WHERE group = isnull(@group, group)

これも問題なく動作します。

私の問題は、次のような2番目のパラメーターが必要なことです。

DECLARE @group INT;
SET @group = 1 --IT1
DECLARE @department VARCHAR(8);
SET @department = 'IT'

SELECT * FROM orders WHERE /*and here add limitation with department*/ group = isnull(@group, group)

注文テーブルにはGROUP列がありますが、DEPARTMENT列はありません。

状況は次のようになります。2つのコンボボックスがあります。1つは部門用、2つ目はグループ用です。最初に私はオプションがあります:

  • 全て
  • それ
  • コールセンター

2番目は、ユーザーがcombo1から何かを選択したときに入力されます。彼がITを選択した場合、グループコンボボックスには次のオプションがあります。

  • 全て
  • IT1
  • IT2

ユーザーが最初のコンボ部門から選択してからグループ化すると、グループのみをチェックするので簡単です。
問題は、彼が部門ITからのすべての注文を希望する場合です。

グループが部門に割り当てられる方法は次のとおりです

  • IT-1,2,5
  • コールセンター-4,6
  • 印刷-3

何か案は?

追加した:

私はそのようなものを作成しました:

DECLARE @group INT;
SET @group = 1 --IT1
DECLARE @department VARCHAR(8);
SET @department = 'IT'

SELECT * FROM orders WHERE
(@department IS NULL OR (@department='IT' AND group IN (1,2,5)) OR (@department='PRINT' AND group =3))
     AND
     (@group IS NULL OR group = @group)

それが正しいかどうかはわかりません、それはどういうわけかうまくいきます:)

4

2 に答える 2

1

これがクエリです。フロントエンドでは、単一のグループが選択されたときに、以前と同じように@group変数を割り当てます。単一のグループが選択されていない場合は、部門にフラグを割り当てます。したがって、すべてのITが選択された場合は、@ allITを1(または、NULLでない限りは何でも)に設定し、次のように進めます。

SELECT * FROM orders 
WHERE (@group = NULL OR group = @group)
AND
(@allIT = NULL OR group = 1 or group = 2 or group = 3)
AND
(@allCallCenter = NULL OR group = 4 or group = 5)
...

コンボボックスで何も選択されていない場合は、そのパラメーター値をNULLに設定します。

于 2012-04-19T09:32:32.400 に答える
1

union allを介してレコードが入力されたCTEを使用して、テーブルがあるふりをすることができます。次に、結合とチェックを実行します。必要に応じて、CTEを派生テーブルに置き換えることができます。

; WITH departments (DepartmentID, GroupID) as (
  select 'IT', 1
  union all
  select 'IT', 2
  union all
  select 'IT', 5
  union all
  select 'CALL CENTRE', 4
  union all
  select 'CALL CENTRE', 6
  union all
  select 'PRINT', 3
)
SELECT * 
FROM orders 
  INNER JOIN departments
     ON orders.[group] = departments.GroupID
WHERE (@Group is null OR [group] = @group)
  AND (@department is null OR DepartmentID = @department)
于 2012-04-19T09:46:44.587 に答える