2012-04-18 7 views
0

を返す:ストアドプロシージャこのストアドプロシージャは、構造化される方法である立方体の結果

[dbo].[getSp] (
    @Color varchar(10) = Null, 
    @Finish varchar(10) = Null, 
    @Height varchar(10) = Null, 
    @Type varchar(10) = Null, 
    @Trim varchar(10) = Null, 
    @Width varchar(10) = Null 
) 

これはsearched..Thisデータが不完全である前に、データがどのように見えるかですが、に一例として、アイデアを得る。

SELECT * FROM TABLE WHERE Type = @Type And 
(

..... Confused about this part, 

) 

しかし、基本的に、私が実行したいと思います:それは次のようになりますので、すべての組み合わせがここにあるであろう。..

Color | Finish | Height | Type | Trim | Width | 
Blue | Shiny | Tall | Toaster | Normal | 3.5 | 
(NULL) | (NULL) | (NULL) | Toaster | (NULL) | 3.5 | 
(NULL) | (NULL) | Tall | Toaster | Deco | 4 | 
(NULL) | Shiny | Tall | Toaster | Deco | 4 | 
Blue | Shiny | (NULL) | Toaster | Deco | 4 | 
(NULL) | Shiny | Tall | Toaster | Deco | 4 | 
(NULL) | Satin | Tall | Toaster | Deco | 4 | 
    Red | (NULL) | Tall | Toaster | Deco | 4 | 

SELECT文は、プライマリ検索フィールドとしてTypeを持っているでしょうストアドプロシージャは、このようなparamsは一部のみで呼び出されたときにテーブルに行であるそれらの組合せを含むように:

[getSp] 
@Color='Blue', 
@Finish='Shiny', 
@Type='toaster' 

アンD SPは最終的にこの(すべての組み合わせ)を返します。..

1. Blue Shiny Tall Toaster 
2. Blue Shiny Toaster 
3. Blue Tall Toaster 
4. Blue Toaster 
5. Tall Toaster 
6. Shiny Toaster 
7. Shiny Tall Toaster 

だから私はあなたがストアドプロシージャのparamsに含まれているもののみのためのすべての組み合わせを返すために、ストアドプロシージャにWhereステートメントを構築する方法について混乱しています残りのパラメータ(WidthTrimなど)は、デフォルトでNULLとして渡され、検索結果から除外されます。

私は、SQLステートメントを構築しようとした

SELECT * FROM TABLE WHERE 
Type = @Type AND 
(
(Color = @Color OR COALESCE(@Color,COLOR) IS NULL) OR... 
... for each other param 
) 

私は運なしでこれを試してみた

SELECT * FROM TABLE WHERE 
Type = @Type AND 
(
COLOR = COALESCE(@Color,COLOR) AND... 
... for each other param 
) 

私は運なしでこれを試してみた

... ...が、また失敗しました。どんな提案も役に立ちます。あなたは、その後のparamを提供する場合

答えて

0

これはあなたのニーズを満たす必要がありますが、それ以外フィルタリングするためにそれを使用することはしません:

SELECT * 
FROM table_1 
WHERE (@Color IS NULL OR Color = @Color) 
AND (@Finish IS NULL OR Finish = @Finish) 
AND (@Height IS NULL OR Height = @Height) 
AND (@Type IS NULL OR Type = @Type) 
AND (@Trim IS NULL OR Trim = @Trim) 
AND (@Width IS NULL OR Width = @Width) 
+0

は私が探している結果を返しません...実際にそれだけを返します#1のような行は、他のすべてのレベルは返されません。 –

+0

ANDをORに変更します。 –

+0

これは多すぎる結果を返します。 –

関連する問題