2016-06-14 5 views
1

나는 이것이 바보 같은 질문이라고 생각합니다. mysql 쿼리의 결과를 바꿀 수 있습니까?쿼리 mysql의 결과를 변환하십시오.

나는이 같은 쿼리 :

SELECT SUM(a.BALANCE) AS STORAGE, 
(SELECT SUM(LIFT_ON) FROM tb_fin_repo b WHERE LPAD(MONTH(b.DATE_OUT), 2, 0) = 05) AS REPO, 
(SELECT SUM(CLEANING) FROM tb_fin_cleaning c WHERE LPAD(MONTH(c.OUT_DATE), 2, 0) = 05) AS CLEANING, 
(SELECT SUM(ONE_BAR) FROM tb_fin_one_bar d WHERE LPAD(MONTH(d.OUT_DATE), 2, 0) = 05) AS ONE_BAR, 
(SELECT SUM(YEARS2) FROM tb_fin_test_periodic e WHERE LPAD(MONTH(e.OUT_DATE), 2, 0) = 05) AS YEARS2, 
(SELECT SUM(YEARS5) FROM tb_fin_test_periodic f WHERE LPAD(MONTH(f.OUT_DATE), 2, 0) = 05) AS YEARS5, 
(SELECT SUM(REPAIR) FROM tb_fin_repair g WHERE LPAD(MONTH(g.OUT_DATE),2,0)) AS REPAIR 

FROM tb_fin_storage a 
WHERE LPAD(MONTH(a.OUT_DATE), 2, 0) = 05 

결과는 다음과 같습니다

+---------+--------+----------+---------+--------+--------+---------+ 
| STORAGE | REPO | CLEANING | ONE_BAR | YEARS2 | YEARS5 | REPAIR | 
+---------+--------+----------+---------+--------+--------+---------+ 
| 2210.40 | 108.00 | 9490.00 | 1512.00 | 250.00 | 540.00 | 7651.95 | 
+---------+--------+----------+---------+--------+--------+---------+ 
1 row in set (0.00 sec) 

이 같은 필요

+-------------+---------+ 
| DESCRIPTION | VALUE | 
+-------------+---------+ 
| STORAGE  | 2210.40 | 
| REPO  | 108.00 | 
| CLEANING | 9490.00 | 
| ONE_BAR  | 1512.00 | 
| YEARS2  | 250.00 | 
| YEARS5  | 540.00 | 
| REPAIR  | 7651.95 | 
+-------------+---------+ 

이 가능 도움말이 너무 감사에 대한

+1

다음을 참조하십시오 : http://stackoverflow.com/questions/13944417/mysql-convert-column-to-row-pivot-table – PaulF

답변

1

요 이것은 내가 본 최고의 쿼리하지

SELECT 'STORAGE' as description, SUM(a.BALANCE) AS STORAGE FROM tb_fin_storage a 
WHERE LPAD(MONTH(a.OUT_DATE), 2, 0) = 0 
UNION ALL 
SELECT 'REPO',SUM(LIFT_ON) FROM tb_fin_repo b 
WHERE LPAD(MONTH(b.DATE_OUT), 2, 0) = 05 
UNION ALL 
SELECT 'CLEANING' , SUM(CLEANING) FROM tb_fin_cleaning c 
WHERE LPAD(MONTH(c.OUT_DATE), 2, 0) = 05) 
UNION ALL 
SELECT 'ONE_BAR',SUM(ONE_BAR) FROM tb_fin_one_bar d 
WHERE LPAD(MONTH(d.OUT_DATE), 2, 0) = 05) 
UNION ALL 
SELECT 'YEARS2' , SUM(YEARS2) FROM tb_fin_test_periodic e 
WHERE LPAD(MONTH(e.OUT_DATE), 2, 0) = 05 
UNION ALL 
SELECT 'YEARS5' , SUM(YEARS5) FROM tb_fin_test_periodic f 
WHERE LPAD(MONTH(f.OUT_DATE), 2, 0) = 05 
UNION ALL 
SELECT 'REPAIR' , SUM(REPAIR) FROM tb_fin_repair g 
WHERE LPAD(MONTH(g.OUT_DATE),2,0) 
+0

감사합니다, 하나님이 축복을 위해 축복을 ... –

+0

어찌하여 가치의 합계를 얻으시겠습니까? 일반적으로 PHP에서 사용하지만 mysql에서 직접 가능합니까? –

+0

전체 값 또는이 쿼리 + 총 값만 원하십니까? @FadlyDzil – sagi

1

하지만, 당신에게 당신이 요구하는 어떤 아이디어를 제공하기 위해 : 유 UNION ALL를 사용해야합니다.

당신은 UNION 사용할 수 있습니다

SELECT 'STORAGE' as DESCRIPTION,SUM(a.BALANCE) as Value 
FROM tb_fin_storage a 
WHERE LPAD(MONTH(a.OUT_DATE), 2, 0) = 05 
UNION 
SELECT 'REPO',SUM(LIFT_ON) 
FROM tb_fin_repo b 
WHERE LPAD(MONTH(b.DATE_OUT), 2, 0) = 05 
UNION 
SELECT 'CLEANING',SUM(CLEANING) 
FROM tb_fin_cleaning c 
WHERE LPAD(MONTH(c.OUT_DATE), 2, 0) = 05 
UNION 
SELECT 'ONE_BAR',SUM(ONE_BAR) 
FROM tb_fin_one_bar d 
WHERE LPAD(MONTH(d.OUT_DATE), 2, 0) = 05 
UNION 
SELECT 'YEARS2',SUM(YEARS2) 
FROM tb_fin_test_periodic e 
WHERE LPAD(MONTH(e.OUT_DATE), 2, 0) = 05 
UNION 
SELECT 'YEARS5',SUM(YEARS5) 
FROM tb_fin_test_periodic f 
WHERE LPAD(MONTH(f.OUT_DATE), 2, 0) = 05 
UNION 
SELECT 'REPAIR', SUM(REPAIR) 
FROM tb_fin_repair g 
WHERE LPAD(MONTH(g.OUT_DATE),2,0) 

당신이 tb_fin_repair WHERE에서 = 05을 잊지 않았다?

+0

감사합니다, 하나님은 축복을 위해 축복을 ... –

+0

'UNION ALL'은 모든 서브 쿼리가 단지 1 행을 반환하기 때문에 더 빠릅니다. – sagi

+0

@sagi 나는 눈에 보이는 차이가있을 것이라고 생각하지 않습니다. 그러나 기술적으로 당신은 맞습니다. 'UNION ALL'은 더 빠를 수 있습니다. – Alex