2012-09-15 5 views
2

얼마 전에 보고서를 구현하는 작업이있었습니다. 내가 직면하고있는 문제는 다음과 같습니다. 내가 달성하고자하는 그룹이 이름, 합계 값입니다일부 필드 값에 따라 하나의 행을 그룹화하고 결과를 얻습니다.

name  value type 
------------------------ 
100 Kasa | 50000 | B 
100 Kasa | 30000 | A 
80 Kasa | 500 | A 
80 Kasa | 50 | B 
200 Hello | 3000 | A 
645 Bye | 1234 | B 

유형 경우이 동일하며 유형이 다른 경우 다음 다른 세포로 쓰기 : 나는 테이블이 있습니다. 나는 2 가지 종류 밖에 없다.

는 내가 코드에서 난장판을 만드는 PHP, 그들을 그룹화하고 지금은

name  valueB valueA 
-------------------------- 
100 Kasa | 50000 | 30000 
80 Kasa | 0 | 550 
200 Hello | 0 | 3000 
645 Bye | 1234 | 0 

로 결과를 얻으려면, 지금은 사람이 MySQL의

와 함께 할하는 데 도움이 수 바라고

답변

2

나는
그것은해야 당신의 예상 출력 (결과가) 잘못 생각 :

NAME  VALUEB VALUEA 
-------------------------- 
100 Kasa 50000 30000 
200 Hello 0  3000 
645 Bye  1234 0 
80 Kasa  50  500 
당신은 CASE 문으로 그

에 대한 SUM 기능을 사용할 수 있습니다 :

SELECT name, 
     SUM(CASE type WHEN 'B'THEN value ELSE 0 END) valueB, 
     SUM(CASE type WHEN 'A' THEN value ELSE 0 END) valueA 
FROM myTable 
GROUP BY name; 

또는 IF 문 :

See this SQLFiddle

예상되는 출력은 다음과 같은 경우

SELECT name, 
     SUM(IF (type = 'B' , value , 0)) valueB, 
     SUM(IF (type = 'A' , value , 0)) valueA 
FROM myTable 
GROUP BY name; 
( NULL 0 대신)

See this SQLFiddle

0
SELECT name, SUM(IF(type = 'A', value, 0)) valueA, SUM(IF(type = 'B', value, 0)) valueB 
FROM mytable 
GROUP BY name 
+0

SELECT name, GROUP_CONCAT(CASE type WHEN 'B'THEN value ELSE NULL END) valueB, GROUP_CONCAT(CASE type WHEN 'A' THEN value ELSE NULL END) valueA FROM myTable GROUP BY name; 
47,당신이 날을 저장, 감사합니다. 선택 진술 안에 있다면 쓸 수 있다는 것을 몰랐습니다. 어쨌든, 고마워. –

관련 문제