2016-06-14 35 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

Yo ü應使用UNION ALL

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

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) 

你沒忘記= 05tb_fin_repair WHERE

+0

謝謝,上帝保佑分享... –

+0

'聯盟所有'應該更快 – sagi

+0

@sagi因爲每個子查詢只返回1行,我不認爲會有任何可見的區別。但從技術上講,你是對的,'聯盟'可能會更快。 – Alex