2017-12-13 18 views
4

하나의 열 "유형"이있는 sql 테이블이 있습니다. 값은 A, B, C, D입니다.
형식이 intype @type 인 저장 프로 시저를 작성하고 있습니다.
@type은 화면에서 사용자 선택에 따라 'A'또는 'A, B, C'또는 'ALL'값을 가질 수 있습니다. 즉, 사용자가 단일, 복수 또는 모두 옵션을 선택할 수 있습니다.
"type"열의 조건으로 내 테이블에서 데이터를 필터링해야합니다. "in"을 사용하여 대소 문자가있는 경우

는 내가 테이블 형식으로 값을 반환 분할 기능을 작성했습니다
select * from maintable where 
(case when @type ='ALL' then 1=1) else 
type in (select data from SplitString(@type,',')) end) 

아래에 비슷한합니다.

ALL을 선택하면 전체 테이블을 반환해야합니다. 특정 유형을 선택하면 해당 유형 만 반환해야합니다.

저는 2012 년 sqlserver를 사용하고 있습니다.
친절히 도움주세요!

+0

어떻게'SP'에'IF' 사용에 대한 – Sami

답변

3

SELECT * 
FROM maintable 
WHERE @type ='ALL' OR  
(@type <>'ALL' AND TYPE IN (SELECT data FROM SplitString(@type,',')) 
+0

'SplitString()이 아니라'STRING_SPLIT()'입니다 – Sami

+0

@Sami 그는 이것이 그가 작성한 UDF라고 말했습니다. –

+0

아, 그래, 내 나쁜 :) – Sami

0

당신은 아래처럼 할 수보십시오 :

if @type ='ALL' 
    set @type ='A,B,C,D' 

select * from maintable where 
type in (select data from SplitString(@type, ',')) 
0

당신이 사용할 수있는 IF :

IF @type ='ALL' 
    SELECT * 
    FROM MainTable 
     ELSE 
      SELECT * 
      FROM MainTable 
      WHERE Type IN (SELECT data FROM SplitString(@type,','))