[sql] SQL SELECT에서 IF… THEN을 어떻게 수행합니까?

명세서 IF...THEN내에서 어떻게 수행 SQL SELECT합니까?

예를 들면 다음과 같습니다.

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product



답변

CASE명령문은 SQL에서 IF에 가장 가깝고 모든 버전의 SQL Server에서 지원됩니다.

SELECT CAST(
             CASE
                  WHEN Obsolete = 'N' or InStock = 'Y'
                     THEN 1
                  ELSE 0
             END AS bit) as Saleable, *
FROM Product

CAST결과를 부울 값으로 원하는 경우 에만 수행하면 됩니다. 에 만족하면 다음과 int같이 작동합니다.

SELECT CASE
            WHEN Obsolete = 'N' or InStock = 'Y'
               THEN 1
               ELSE 0
       END as Saleable, *
FROM Product

CASE문은 다른 CASE문에 포함되거나 집계에 포함될 수도 있습니다.

SQL Server Denali (SQL Server 2012)는 IIF 문을 추가하여 액세스 할있습니다 ( Martin Smith가 지적함 ).

SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product


답변

이 상황에 대한 사례 진술은 귀하의 친구이며 다음 두 가지 형식 중 하나를 취합니다.

간단한 경우 :

SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                       WHEN <othervalue> THEN <returnthis>
                                         ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

확장 사례 :

SELECT CASE WHEN <test>      THEN <returnvalue>
            WHEN <othertest> THEN <returnthis>
                             ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

멋진 주문을 위해 case by 절에 case 문을 넣을 수도 있습니다.


답변

SQL Server 2012 에서이 IIF기능 을 사용할 수 있습니다 .

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product

이것은 사실상 (간단한 SQL은 아니지만) 쓰는 간단한 방법입니다 CASE.

확장 CASE버전 과 비교할 때 간결함을 선호합니다 .

모두 IIF()CASESQL 문 내에서 식으로 해결 만 잘 정의 된 장소에서 사용할 수 있습니다.

CASE 식을 사용하여 Transact-SQL 문의 실행 흐름, 명령문 블록, 사용자 정의 함수 및 저장 프로 시저를 제어 할 수 없습니다.

이러한 제한 사항으로 요구 사항을 충족 할 수없는 경우 (예 : 일부 조건에 따라 다른 모양의 결과 집합을 반환해야하는 경우) SQL Server에도 절차 IF키워드가 있습니다.

IF @IncludeExtendedInformation = 1
  BEGIN
      SELECT A,B,C,X,Y,Z
      FROM   T
  END
ELSE
  BEGIN
      SELECT A,B,C
      FROM   T
  END

그러나이 방법으로 매개 변수 스니핑 문제를 피하기 위해주의를 기울여야합니다 .


답변

The Power of SQL CASE Statements 에서 멋진 예제를 찾을 수 있으며 사용할 수 있는 명령문은 다음과 같습니다 ( 4guysfromrolla ).

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees


답변

CASE를 사용하십시오. 이 같은.

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END


답변

SELECT
(CASE
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
                                            ELSE 'NO'
 END) as Salable
, *
FROM Product


답변

Microsoft SQL Server (T-SQL)

에서 다음 select을 사용하십시오.

select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end

A의 where절, 사용 :

where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end