2012-12-20 4 views
1

하나의 열에 서술문을 찾고 새로운 열을 삽입 할 때마다 문제가 있습니다. 메신저 데이터베이스를 사용하여. 나는의 값을 찾기 위해 CASE 문을 사용하려고case 문을 사용하여 열 삽입

Class math tech english 
--------------------------- 
    1  Y  Y  N 
    2  Y  N  Y 
    3  Y  N  N 

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

내가이 같은 출력 할 데이터를 원하는 나는이

Class  Sub 
    ----------------- 
    1  math  
    1  tech 
    2  math 
    2  english 
    3  math 

같은 데이터가 있다고 가정 해 하지만 문제는 발견 된 값에 대한 열의 결과 하나만 반환한다는 것이고 결국 각 열에 대해 case 문을 사용하여 동일한 클래스를 반복하게됩니다. case 문을 결합하면 작동하지 않을 것이므로 하나의 열을 제공합니다.

답변

4

집계에서 CASE 표현식을 랩핑하고 GROUP BY을 추가해야합니다. 알파벳 순으로 YN

(SQL Fiddle Demo)

당신은 PIVOT 기능을 사용 할 필요가
SELECT class, 
     MAX(CASE 
      WHEN (community_id = 'Math') THEN 'Y' 
      ELSE 'N' 
      END) AS Math, 
     MAX (CASE 
       WHEN (community_id = 'tech') THEN 'Y' 
       ELSE 'N' 
      END) AS tech, 
     MAX (CASE 
       WHEN (community_id = 'english') THEN 'Y' 
       ELSE 'N' 
      END) AS english 
FROM x_class_community 
GROUP BY class 
+0

max 함수와 group by을 사용하면 각 클래스에 대해 모든 va가 필요합니다. 표현을 가로 지르는 lues. 필자의 경우 함수로 그룹을 만들 때 중복을 잃지 만 괜찮습니다. 그러나 값은 단일 클래스에서 표현되지 않습니다. – mmSQL

+0

@ mmSQL - 예제 데이터에서 원하는 결과를 반환합니다 ([SQL Fiddle link 참조] (http://www.sqlfiddle.com/#!3/186ec/10)). 실제로 뭔가 다른 것을 원한다고 말하는 겁니까? –

+0

나는 그것을 알아 들었다. 나는 작은 오타가 있었다. – mmSQL

0

은 당신이 PIVOT 기능을 사용할 수 있습니다 : 당신은 그러나 여기에 SQL 서버에 대한 링크입니다, 당신의 DBMS를 지정하지 않은

select class, 
    isnull(math, 'N') math, 
    isnull(tech, 'N') tech, 
    isnull(english, 'N') english 
from 
(
    SELECT class, community_id, 'Y' as flag 
    FROM x_class_community 
) src 
pivot 
(
    max(flag) 
    for community_id in (math, tech, english) 
) piv 

참조가 SQL Fiddle with Demo

결과는 다음과 같습니다 :

| CLASS | MATH | TECH | ENGLISH | 
--------------------------------- 
|  1 | Y | Y |  N | 
|  2 | Y | N |  Y | 
|  3 | Y | N |  N | 
관련 문제