복붙노트

[SQL] Select 문에서 케이스

SQL

Select 문에서 케이스

나는 SELECT에서 CASE이있는 SQL 문을하고 난 바로 그것을 얻을 수 없습니다. 사건이 조건은 결과이 경우 어디에서 너희들은 나에게 사례의 예를 표시 할 수 있습니다. 예를 들면 :

     Select xxx, yyy
     case : desc case when bbb then 'blackberry';
     when sss then 'samsung';
     end 
     from (select ???? .....

여기서 결과가 보여

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry

해결법

  1. ==============================

    1.MSDN의 구문 및 사용에 관한 질문의이 유형에 대한 좋은 참조입니다. 이것은 SQL 트랜잭션 참조에서입니다 - CASE 페이지를 참조하십시오.

    MSDN의 구문 및 사용에 관한 질문의이 유형에 대한 좋은 참조입니다. 이것은 SQL 트랜잭션 참조에서입니다 - CASE 페이지를 참조하십시오.

    http://msdn.microsoft.com/en-us/library/ms181765.aspx

    USE AdventureWorks2012;
    GO
    SELECT   ProductNumber, Name, "Price Range" = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
    FROM Production.Product
    ORDER BY ProductNumber ;
    GO
    

    당신은 SQL Server를 사용하는 경우 당신이 체크 아웃 할 수 있습니다 또 다른 좋은 사이트는 SQL Server 중앙이다. 이것은 당신이 배우고 싶은 SQL 서버의 어떤 영역에 대한 가능한 자원의 큰 다양성이있다.

  2. ==============================

    2.나는이 당신을 위해 도움이 될 수 있다고 생각.

    나는이 당신을 위해 도움이 될 수 있다고 생각.

    간단한 CASE 식으로 SELECT 문을 사용하여

    SELECT 문 내에서 단순 CASE 식은 동등성 만 확인이 가능; 다른 비교는 이루어지지 않습니다. 다음의 예는 그들을 더 이해할 수 있도록 제품 라인 범주의 표시를 변경하려면 CASE 식을 사용합니다.

    USE AdventureWorks2012;
    GO
    SELECT   ProductNumber, Category =
          CASE ProductLine
             WHEN 'R' THEN 'Road'
             WHEN 'M' THEN 'Mountain'
             WHEN 'T' THEN 'Touring'
             WHEN 'S' THEN 'Other sale items'
             ELSE 'Not for sale'
          END,
       Name
    FROM Production.Product
    ORDER BY ProductNumber;
    GO
    

    A는 CASE 표현식 검색과 SELECT 문을 사용하여

    SELECT 문 내에서 값이 비교 값에 따라 결과 집합의 교체에 대한 CASE 표현식이 허용 검색. 다음은 제품에 대한 가격 범위를 기반으로 텍스트 주석으로 공시 가격을 표시합니다.

    USE AdventureWorks2012;
    GO
    SELECT   ProductNumber, Name, "Price Range" = 
          CASE 
             WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
             WHEN ListPrice < 50 THEN 'Under $50'
             WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
             WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
             ELSE 'Over $1000'
          END
    FROM Production.Product
    ORDER BY ProductNumber ;
    GO
    

    ORDER BY 절에 CASE 사용

    하기 실시 예는 소정의 열 값에 기초하여 행의 정렬 순서를 결정하는 ORDER BY 절로 CASE 식을 사용한다. 첫번째 예에서, HumanResources.Employee 테이블의 SalariedFlag 열에있는 값을 평가한다. 1에 SalariedFlag가 설정되어 직원은 내림차순으로 BusinessEntityID 순서로 반환됩니다. SalariedFlag 0으로 설정되어 직원 승순 BusinessEntityID 순서로 복귀된다. 열 CountryRegionName 다른 모든 행에 대해 '미국의 같고 CountryRegionName 의해 때 두 번째 예에서, 상기 결과 집합은 열 TerritoryName으로 정렬된다.

    SELECT BusinessEntityID, SalariedFlag
    FROM HumanResources.Employee
    ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
            ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
    GO
    
    
    SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
    FROM Sales.vSalesPerson
    WHERE TerritoryName IS NOT NULL
    ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
             ELSE CountryRegionName END;
    

    UPDATE 문에 CASE 사용

    다음 예는 음의 값 VacationHours 결과에서 10 시간 감산하면 VacationHours 40 시간 증가 0 SalariedFlag 세트 직원 열 VacationHours에 설정되는 값을 결정하기위한 UPDATE 문에 CASE 식을 사용; 그렇지 VacationHours 20 시간으로 증가된다. OUTPUT 절은 전에 휴가 값 후에 표시하는 데 사용됩니다.

    USE AdventureWorks2012;
    GO
    UPDATE HumanResources.Employee
    SET VacationHours = 
        ( CASE
             WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
             ELSE (VacationHours + 20.00)
           END
        )
    OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue, 
           Inserted.VacationHours AS AfterValue
    WHERE SalariedFlag = 0; 
    

    HAVING 절에 CASE 사용

    다음은 SELECT 문에 의해 반환되는 행을 제한하는 HAVING 절에 CASE 식을 사용합니다. 성명은 HumanResources.Employee 테이블의 각 직책에 대한 최대 시간당 요금을 반환합니다. HAVING 절은 42 달러보다 최대 지불 속도보다 40 달러 나 여성보다 최대 지불 속도보다 남성에 의해 개최되는 사람들에게 타이틀을 제한합니다.

    USE AdventureWorks2012;
    GO
    SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
    FROM HumanResources.Employee AS e
    JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
    GROUP BY JobTitle
    HAVING (MAX(CASE WHEN Gender = 'M' 
            THEN ph1.Rate 
            ELSE NULL END) > 40.00
         OR MAX(CASE WHEN Gender  = 'F' 
            THEN ph1.Rate  
            ELSE NULL END) > 42.00)
    ORDER BY MaximumRate DESC;
    

    이러한 예의 자세한 설명에 대한 소스를 방문하십시오.

    또한 좋은 정보와 함께 몇 가지 예는 여기와 여기에 방문한다.

  3. ==============================

    3.당신은 또한 사용할 수 있습니다 :

    당신은 또한 사용할 수 있습니다 :

    SELECT CASE
             WHEN upper(t.name) like 'P%' THEN
              'productive'
             WHEN upper(t.name) like 'T%' THEN
              'test'
             WHEN upper(t.name) like 'D%' THEN
              'development'
             ELSE
              'unknown'
           END as type
    FROM table t
    
  4. from https://stackoverflow.com/questions/14189216/case-in-select-statement by cc-by-sa and MIT license