0

このクエリの作成に大きな問題があります。

私のサンプルデータがこのようになったら...

id   Fruit name     Group      Type
-----------------------------------------
1    Orange         Citrus     null
2    Mango          Sweet      null
3    Red chilly     Hot        null
4    Green chilly   Hot        null
5    Green chilly   Hot        Organic 1
6    Green chilly   Hot        Organic 2

パラメータを受け入れるストアドプロシージャを作成したいと思い@FoodTypeます。

  • @FoodTypeとして渡されるNULLと、SPは行1, 2, 3とを返す必要があり4ます。
  • @FoodTypeの場合Organic 2、SPはとを返す必要が1, 2, 3あり6ます。

私のテーブルではFruitNameType列が複合一意キーを作成する可能性がありますが、作成しませんでした。

この種のクエリを作成するための最良のアプローチは何ですか?

更新:
「Organic2」が渡されると、行4にタイプが定義されていないため、行6が行4よりも優先されます。

4

2 に答える 2

1

SQL Server 2005以降を使用している場合は、これを試してください(言及していませんが...):

CREATE PROCEDURE dbo.GetFoods(@FoodType VARCHAR(20))
AS
    ;WITH Data AS
    (
        SELECT
            id, FruitName, GroupName, FruitType,
            RowNo = ROW_NUMBER() OVER (PARTITION BY FruitName ORDER BY FruitType DESC)
        FROM dbo.Fruits
        WHERE (FruitType IS NULL OR FruitType = @FoodType)
    )
    SELECT 
        id, FruitName, GroupName, FruitType
    FROM Data
    WHERE RowNo = 1

私の場合、これはあなたが探していることをしているようです。

を渡すとNULL、行が返され1, 2, 34

EXEC dbo.GetFoods @FoodType = NULL

ここに画像の説明を入力してください

を使用して呼び出すとOrganic 2、次のようになります。

EXEC dbo.GetFoods @FoodType = 'Organic 2'

ここに画像の説明を入力してください

于 2012-07-23T06:03:32.100 に答える
0

あなたの質問は明確ではありません。1,2, 3, 4 and 6とにかく、渡されたときに戻りたいことを考えると、'Organic 2'これを保存して作成することができます。がであるフィールドを返します。NULLまた、パラメータがnot NULLである場合は、その基準でフィルタリングします。

create procedure dbo.YourProcedureName
(
@FoodType varchar(20)
)
AS
BEGIN
select
id,Fruit, name, Group,Type 
from yourTable where Type IS NULL or Type = @FoodType 
END
于 2012-07-23T05:22:27.767 に答える