2012-07-23 3 views
0

이 쿼리를 작성할 때 큰 문제가 있습니다. SQL에서 입력 매개 변수를 기반으로 행을 필터링하는 방법은 무엇입니까?

내 샘플 데이터는 다음과 같습니다 경우

... 나는 @FoodType 매개 변수를 허용하는 저장 프로 시저를 만들고 싶습니다

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 

. @FoodTypeNULL로 전달되면

  • 는 SP가 행과 1, 2, 34를 반환한다.
  • @FoodTypeOrganic 2 인 경우 SP는 1, 2, 36을 반환해야합니다. 내 테이블에서

, FruitNameType 열은 잠재적 화합물 고유 키를 만들 수 있지만, 그래도 하나를 작성하지 않았다.

이런 종류의 검색어를 작성하는 가장 좋은 방법은 무엇입니까?

업데이트 :
은 '유기 2'가 전달되면, 유형부터는 4 행에 대해 정의되지 않으며, 행 6 우선 순위가 행 인수 4.

+0

아마도 'NULL'은 어떤 유형일 수 있습니다. – Ambrose

+0

'Organic 2'가 전달 될 때 1,2,3,4 및 6을 반환하고 싶다고 생각합니다. –

+1

@marc_s - 입력 한 내용과 일치하는 항목을 모두 가져 오려면 어떤 의미가 있습니다. – dfb

답변

1

이 시도 (당신이 언급하지 않았다 ...) :

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 

이 당신을 위해 무엇을 찾고있어 할 것 같다 나의 경우에는. 당신이 Organic 2를 사용하여 호출하는 경우

당신이 NULL에 전달하면, 당신이 돌아 오기 행 1, 2, 34

EXEC dbo.GetFoods @FoodType = NULL 

enter image description here

는, 당신은 다시 얻을 :

EXEC dbo.GetFoods @FoodType = 'Organic 2' 

enter image description here

+0

Cant는 당신이 나의 데이터로 그것의 실용적인 예를 가지고 있다고 믿는다 !! 당신은 최고입니다. 감사합니다. 감사합니다. –

0

귀하의 질문이 명확하지 않다; 어쨌든 'Organic 2'이 전달되면 1,2, 3, 4 and 6을 반환하기를 원한다면 을 저장하면됩니다. 필드는 NULL이고, 매개 변수가 not NULL 인 경우 해당 기준으로 필터링합니다. 당신이 2005 이상 SQL 서버에 있다면

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 
+0

아니요. 단지 1, 2, 3 및 6 행을 원합니다. –

관련 문제