2014-03-04 45 views
1

列我有這樣的選擇SQL選擇行數據傳到

SELECT 
     products.prod_name, SUM(beg_inv - end_inv) AS inv, 
     MONTH(task_date) MONTH 
    FROM performances 
     INNER JOIN tasks 
     ON performances.task_id = tasks.task_id 
     INNER JOIN people 
     ON people.person_id = tasks.emp_id 
     INNER JOIN products 
     ON performances.prod_id = products.prod_id 
    WHERE YEAR(task_date) = '2013' 
    GROUP BY performances.prod_id, MONTH(task_date) 
    ORDER BY MONTH(task_date), prod_name 

其出放爲:

Prod name inv month 
Product 1 5 3 
Product 1 10 5 

我要傳播這樣的:

Product Name January February March April May June July August September October November December 
Product 1        5   10       

有沒有可能不必做一個樞軸,只是在選擇?

+0

這種事情我認爲報告工具會更合適。由於SQL不是爲該IMO構建的,因此您正在浪費數據庫資源來格式化表示。 – Leo

+0

@Sid:唯一的選擇是透視。 –

+0

我使用PHP/Code Igniter/MySQL。我真的不確定如何使用報告工具,但如果可以使用這種工具,您是否有任何想法能夠適合我使用的工具? – Sid

回答

2

只是做SQL中樞軸就像這樣:

SELECT products.prod_name, 
     SUM(case when MONTH(task_date) = 1 then beg_inv - end_inv end) AS January, 
     SUM(case when MONTH(task_date) = 2 then beg_inv - end_inv end) AS February, 
     SUM(case when MONTH(task_date) = 3 then beg_inv - end_inv end) AS March, 
     . . . 
FROM performances 
     INNER JOIN tasks 
     ON performances.task_id = tasks.task_id 
     INNER JOIN people 
     ON people.person_id = tasks.emp_id 
     INNER JOIN products 
     ON performances.prod_id = products.prod_id 
WHERE YEAR(task_date) = 2013 
GROUP BY products.prod_name, 
ORDER BY products.prod_name,; 

注意,這也需要小的改動GROUP BYORDER BY條款。

+0

嗨,謝謝,我試過這種方式,起初看起來不錯,如果我沒有將MONTH(task_date)添加到Group By,結果不正確,如果我添加它們,我將產品拆分爲多個月 – Sid

+0

@Sid 。 。 。你必須更好地解釋「結果不正確」的含義。我很確定這個查詢是否符合你的要求。 –