Select 문의 사례


141

CASEfrom 이있는 SQL 문이 있는데 SELECT제대로 얻을 수 없습니다. 너희들에게 나에게 예를 보여줄 수 있니?CASE사례가 조건이고 결과가 사례에서 나온예를 들면 다음과 같습니다.

     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. 간단한 CASE 표현식 2. 검색된 CASE 표현식. 그리고 SELECT, UPDATE, With ORDER BY, With HAVING 쿼리에서 두 유형의 대소 문자 사용.
Somnath Muluk

답변:


195

MSDN은 구문과 사용법에 관한 이러한 유형의 질문에 대한 좋은 참고 자료입니다. Transact 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 Central 입니다. 여기에는 학습하려는 SQL Server 영역에 사용할 수있는 다양한 리소스가 있습니다.


82

나는 이것들이 당신에게 도움이 될 것이라고 생각합니다.

SELECT간단한 CASE표현 으로 문장 사용하기

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

SELECT검색된 CASE표현식 으로 명령문 사용

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

CASE에서 사용ORDER BY

다음 예는 절의 CASE표현식을 사용하여 ORDER BY주어진 열 값을 기준으로 행의 정렬 순서를 결정합니다. 첫 번째 예에서는 HumanResources.Employee 테이블의 SalariedFlag 열의 값이 평가됩니다. SalariedFlag가 1로 설정된 직원은 내림차순으로 BusinessEntityID에 의해 순서대로 리턴됩니다. SalariedFlag가 0으로 설정된 직원은 BusinessEntityID에 따라 오름차순으로 반환됩니다. 두 번째 예에서 CountryRegionName 열이 'United States'와 같을 때 TerritoryName 열에 따라 결과 집합이 정렬되고 다른 모든 행에 대해 CountryRegionName이 정렬됩니다.

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;

명세서 CASE에서 사용UPDATE

다음 예는 명령문 의 CASE표현식을 사용하여 UPDATESalariedFlag가 0으로 설정된 직원의 VacationHours 열에 설정된 값을 판별합니다. VacationHours에서 10 시간을 빼면 음수 값이되어 VacationHours가 40 시간 증가합니다. 그렇지 않으면 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; 

사용 CASEA의HAVING

다음 예제는 절의 CASE표현식을 사용 HAVING하여 SELECT명령문이 리턴하는 행을 제한합니다 . 이 명령문은 HumanResources.Employee 테이블의 각 직책에 대한 최대 시간당 비율을 리턴합니다. 이 HAVING조항은 제목이 최대 임금이 40 달러를 초과하는 남성 또는 최대 임금이 42 달러를 초과하는 여성이 보유한 제목으로 제한됩니다.

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;

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

또한 자세한 내용이 포함 된 예를 보려면 여기여기 를 방문 하십시오 .


자세한 답변을 주셔서 감사합니다.
Aneeq Azam Khan

12

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

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.