2010-05-21 2 views
1

조건부 IF를 사용하여 SELECT 문을 생성하려고합니다.조건부 SQL 문 구성에 대한 도움말

처럼, 언어 코드 'Swedish'에 레코드가없는 경우 :

SELECT * FROM Entries WHERE Language = 'Swedish' 

THEN 'English'

SELECT * FROM Entries WHERE Language = 'English' 

가 어떻게 MSSQL을 사용하여이 문을 만드는 것입니다 사용할 수 있습니까?

감사합니다,

스테판 순진

+0

언어가 색인 된 경우 스웨덴어가 별도의 진술 문에 존재하는지 여부를 확인하기가 쉽고 빠릅니다. – extraneon

답변

5

:

SELECT * 
FROM Entries 
WHERE Language = 'Swedish' 

UNION ALL 

SELECT * 
FROM Entries 
WHERE Language = 'English' 
    AND NOT EXISTS (
     SELECT * 
     FROM Entries 
     WHERE Language = 'Swedish' 
    ) 

나 :

SELECT * 
FROM Entries 
WHERE Language = 'Swedish' 
    OR (Language = 'English' 
     AND NOT EXISTS (
      SELECT * 
      FROM Entries 
      WHERE Language = 'Swedish' 
     ) 
    ) 
+0

+1 두 번째 옵션은 게시 할 때 작성한 것입니다. =) –

+0

고마워, 잘 작동 해! – unitario

1

는이에 대한 저장 프로 시저를 작성하고 코드, 같은에서 사용할 수 있습니다

example

는 희망이 도움이 참조하십시오.

+0

업데이트 : 하나의 쿼리로 그룹화하고 저장 프로 시저를 사용하지 않으려면 Cade Roux의 방법이 더 좋습니다. – Youssef

+0

'count (*) in V'와 'IF (v> 0)'는 tsql에서 유효하지 않습니다. 또한 일반적인'IF EIXSTS (SELECT = FROM from entries from language = 'Swedish')'는'COUNT (*) '를 변수에 넣은 다음 실제로 변수를 IF로 처리하는 것보다 훨씬 빠릅니다. –

+0

당신 말이 맞아요, 난 그냥 코드를 테스트하는 방법을주지 싶었어, 난 SQL Server를 사용하지 마십시오. 및 "select 1 from"은 훌륭한 팁입니다. – Youssef

3

또 다른 방법 : 존재 여부

Select Top 1 * 
From Entries 
Where Language In ('Swedish', 'English') 
Order By Case When Language = 'Swedish' Then 1 Else 2 End 
0

(선택 항목에서 어디 언어 = '스웨덴어') 언어 = '스웨덴어' 끝 그렇지 가 선택 을 시작 WHERE 다음 항목 FROM SELECT * 시작 * 항목에서 언어 = '언어' 끝

1

여기에 기본 문구를 설정하려면이 작업을 수행하는 여러 가지 방법이 있습니다. 다음 시도 할 수있는 저장 프로 시저로 사용하려는 경우

IF (SELECT count(*) FROM entries WHERE language = 'english') > 0 
BEGIN 
    //What you want to do for english 
END 
ELSE IF (SELECT count(*) FROM entries WHERE language = 'swedish') > 0 
BEGIN 
    // What you want to do for Swedish 
END 
ELSE 
BEGIN 
    // There are no records for those languages!! 
END 

:

이제
CREATE PROCEDURE GetLanguageRows 
    @language varchar(500) 
AS 

IF (SELECT count(*) FROM entries WHERE language = @language) > 0 
BEGIN 
    //What you want to do for that language 
END 
ELSE 
BEGIN 
    // No records found! 
END 

당신은

exec GetLanguageRows 'English' 

는 다행스럽게도 필자는 그 다른 훌륭한 함께 약간의 도움을 사용할 수 있습니다 위의 답변!

+0

고맙습니다. 실제로 작업하고 있던 또 다른 문제를 해결했습니다! – unitario

+0

환영합니다 :) – Darxval

0
SELECT * FROM Entries AS e WHERE Language IN('Swedish','English') 
    AND NOT EXISTS(
    SELECT * FROM Entries AS e1 WHERE Language IN('Swedish','English') 
     AND e.Language > e1.Language 
)