2012-12-04 4 views
2

나는 약 6 개월 동안 SQL을 배우고 실습 해왔다. 나는 던지기 위해 준비가되어 있습니다. 그리고 나는 단지 그것을 멍청하고 내 두뇌는 단지 대부분의 패턴을 감쌀 수 없다는 것을 인정합니다. 피벗 테이블을 만들려고합니다. 주제 및 큐브와 기본 엔티티 속성 값 (EAV) 논리를 만드는 방법에 대해 언급 한 원천에 대한 간단한 문학은 그다지 의미가 없습니다. 그것이 무엇을 의미하든간에.멀티 컬럼 크로스 테이블 AKA 피벗

name  action pagecount 
------------------------------- 
Company A PRINT 3 
Company A PRINT 2 
Company A PRINT 3 
Company B EMAIL 6 
Company B PRINT 2 
Company B PRINT 2 
Company B PRINT 1 
Company A PRINT 3 

I를 표로 교차 할 열 action의 총 수와 컬럼의 총 개수와 열 namepagecount

name  action_PRINT action_EMAIL  pagecount_PRINT  pagecount_EMAIL 
-------------------------------------------------------------------------------- 
Company A 4    0     11      0 
Company B 3    1     5      6 
+2

정확한 중복 : http://stackoverflow.com/questions/7674786/mysql-pivot-table – Kamil

+0

아니요. 답변을 검색하는 동안 나는 그의 질문을 발견하고 그의 질문을 위해 테이블을 복사하여 붙여 넣었습니다. 행복하게 생각 나는 작은 방아쇠 : –

답변

2

이러한 유형의 동작은 다음과 같이 알려져있다 (오른쪽 항이?이다) PIVOT이지만 MySQL에는 피벗 함수가 없으므로 집계 함수와 CASE 문을 사용하여 복제해야합니다.

select name, 
    sum(case when action = 'PRINT' then 1 else 0 end) action_print, 
    sum(case when action = 'EMAIL' then 1 else 0 end) action_email, 
    sum(case when action = 'PRINT' then pagecount else 0 end) pagecount_print, 
    sum(case when action = 'EMAIL' then pagecount else 0 end) pagecount_email 
from yourtable 
group by name 

SQL Fiddle with Demo

를 참조 결과는 다음과 같습니다 :

당신은 결과를 생성하려면 다음을 사용할 수 있습니다

|  NAME | ACTION_PRINT | ACTION_EMAIL | PAGECOUNT_PRINT | PAGECOUNT_EMAIL | 
------------------------------------------------------------------------------- 
| Company A |   4 |   0 |    11 |    0 | 
| Company B |   3 |   1 |    5 |    6 | 
+1

완벽. 그래서 사건은 실용적인 행동인가요? 각 행에 대해 대소 문자를 통해 반복되며이 작업을 수행 할 것인가? 감사! –