SQL Case when 사용법

4176 단어 sqlcase
다음으로 전송:http://www.cnblogs.com/yazdao/archive/2009/12/09/1620482.html 
Case 는 두 가지 형식 을 가지 고 있 습 니 다.간단 한 Case 함수 와 Case 검색 함수.
--  Case  CASE sexWHEN '1' THEN ' 'WHEN '2' THEN ' 'ELSE '  ' END--Case    CASE WHEN sex = '1' THEN ' 'WHEN sex = '2' THEN ' 'ELSE '  ' END

이 두 가지 방식 은 같은 기능 을 실현 할 수 있다.간단 한 Case 함수 의 작성 방법 은 상대 적 으로 간결 하지만 Case 검색 함수 에 비해 기능 적 으로 제한 이 있 습 니 다. 예 를 들 어 판단 식 을 쓰 는 것 입 니 다.또 주의해 야 할 문제 가 있 습 니 다. Case 함 수 는 첫 번 째 조건 에 맞 는 값 만 되 돌려 주 고 나머지 Case 부분 은 자동 으로 무 시 됩 니 다.
--   ,    SQL,       “   ”    CASE WHEN col_1 IN ( 'a', 'b') THEN '   'WHEN col_1 IN ('a')       THEN '   'ELSE'  ' END

Case 함 수 를 사용 하면 어떤 일 을 할 수 있 는 지 살 펴 보 겠 습 니 다.1. 이미 알 고 있 는 데 이 터 는 다른 방식 으로 그룹 을 나 누 어 분석 합 니 다.다음 과 같은 데이터 가 있 습 니 다. (더 잘 보이 기 위해 저 는 국가 코드 를 사용 하지 않 고 국가 이름 을 Primary Key 로 직접 사용 합 니 다)
국가 (국가)
인구 (인구)
중국.
600
미국.
100
캐나다
100
영국.
200
프랑스
300
일본.
250
독일.
200
멕시코
50
인도.
250
이 나라 의 인구 데이터 에 따 르 면 아시아 와 북 미의 인구 수 를 통계 한다.아래 의 이 결 과 를 얻어 야 한다.
주.
인구
아시아의
1100
북 미
250
기타
700
이 문 제 를 해결 하려 면 어떻게 하 시 겠 습 니까?주 코드 가 있 는 View 를 만 드 는 것 은 해결 방법 이지 만 통 계 를 동태 적 으로 바 꾸 기 어렵다.Case 함 수 를 사용 하면 SQL 코드 는 다음 과 같 습 니 다.
SELECT  SUM(population),CASE countryWHEN '  '     THEN '  'WHEN '  '     THEN '  'WHEN '  '     THEN '  'WHEN '  '     THEN '   'WHEN '   '  THEN '   'WHEN '   '  THEN '   'ELSE '  ' ENDFROM    Table_AGROUP BY CASE countryWHEN '  '     THEN '  'WHEN '  '     THEN '  'WHEN '  '     THEN '  'WHEN '  '     THEN '   'WHEN '   '  THEN '   'WHEN '   '  THEN '   'ELSE '  ' END;

마찬가지 로 우 리 는 이 방법 으로 임금 의 등급 을 판단 하고 각 등급 의 인원 을 통계 할 수 있다.SQL 코드 는 다음 과 같 습 니 다.
SELECTCASE WHEN salary <= 500 THEN '1'WHEN salary > 500 AND salary <= 600  THEN '2'WHEN salary > 600 AND salary <= 800  THEN '3'WHEN salary > 800 AND salary <= 1000 THEN '4'ELSE NULL END salary_class,
COUNT(*)FROM    Table_AGROUP BYCASE WHEN salary <= 500 THEN '1'WHEN salary > 500 AND salary <= 600  THEN '2'WHEN salary > 600 AND salary <= 800  THEN '3'WHEN salary > 800 AND salary <= 1000 THEN '4'ELSE NULL END;

둘째, 하나의 SQL 문장 으로 서로 다른 조건 의 그룹 을 완성 합 니 다.다음 과 같은 데이터 가 있 습 니 다.
국가 (국가)
성별 (성별)
인구 (인구)
중국.
1
340
중국.
2
260
미국.
1
45
미국.
2
55
캐나다
1
51
캐나다
2
49
영국.
1
40
영국.
2
60
국가 와 성별 에 따라 조 를 나 누 어 결 과 는 다음 과 같다.
나라.
남자.
여자.
중국.
340
260
미국.
45
55
캐나다
51
49
영국.
40
60
일반적으로 UNION 으로 도 하나의 문구 로 조회 가 가능 하 다.하지만 그렇게 소모 (두 개의 Select 부분) 를 늘 리 고 SQL 문 구 는 비교적 길다.다음은 Case 함수 로 이 기능 을 완성 한 예 입 니 다.
SELECT country,
SUM( CASE WHEN sex = '1' THENpopulation ELSE 0 END),  --    SUM( CASE WHEN sex = '2' THENpopulation ELSE 0 END)   --    FROM  Table_AGROUP BY country;

이렇게 해서 우 리 는 Select 를 사용 하여 2 차원 표 에 대한 출력 형식 을 완성 하여 Case 함수 의 강 함 을 충분히 나 타 냈 다.3. Check 에서 Case 함 수 를 사용 합 니 다.Check 에서 Case 함 수 를 사용 하 는 것 은 많은 경우 에 매우 좋 은 해결 방법 입 니 다.Check 을 전혀 사용 하지 않 는 사람 이 많 을 수도 있 습 니 다. 그러면 다음 의 예 를 본 후에 도 SQL 에서 Check 을 사용 해 보 는 것 을 권장 합 니 다.다음은 예 를 들 어 회사 A. 이 회 사 는 여 직원 의 임금 이 1000 위안 을 넘 어야 한 다 는 규정 이 있다.Check 과 Case 로 표현 하면 다음 과 같 습 니 다.
CONSTRAINT check_salary CHECK( CASE WHEN sex = '2'THEN CASE WHEN salary > 1000THEN 1 ELSE 0 ENDELSE 1 END = 1 )

Check 만 사용 하면 다음 과 같 습 니 다.
CONSTRAINT check_salary CHECK( sex = '2' AND salary > 1000 )

여 직원 의 조건 이 맞 으 면 남자 직원 은 입력 할 수 없다.

좋은 웹페이지 즐겨찾기