2013-06-05 43 views
1

我有一個表是這樣的:產生來自同一查詢多個和

id person_id total amount date_time 
1 101  2000   2001-12-10 
2 102  1000   2001-12-10 
3 102  3000   2001-12-10 
4 102  2000   2001-12-10 
5 103  1000   2001-12-11 
6 101  1000   2001-12-11 
7 102  3000   2001-12-11 
8 102  4000   2001-12-11 
9 102  4000   2001-12-11 

我所要的輸出是類似下面的日期2001-12-11

person_101 person_102 person_103 
1000   11000   1000 

我已經嘗試使用SUM()函數,但我堅持使用WHEREJOIN子句。 我該如何解決這個問題?

回答

2
SELECT 
    SUM(CASE WHEN person_id = 101 THEN total_amount ELSE 0 END) as person_101, 
    SUM(CASE WHEN person_id = 102 THEN total_amount ELSE 0 END) as person_102, 
    SUM(CASE WHEN person_id = 103 THEN total_amount ELSE 0 END) as person_103 
FROM 
    my_table 
WHERE 
    date_time ='2001-12-11' 
+0

+1爲'CASE'替代 – Stephan

+0

謝謝這也適用... –

0

您需要透視數據,不幸的是這不是mysql動態,試試這個:

SELECT 
    SUM(IF(person_id = 101,total_amount,0)) as person_101, 
    SUM(IF(person_id = 102,total_amount,0)) as person_102, 
    SUM(IF(person_id = 103,total_amount,0)) as person_103 
FROM 
    my_table 
WHERE 
    date_time = '2001-12-11' 

您也可以按日期做支點分裂,你只需要有它的字段列表和GROUP BY它:

SELECT 
    date_time, 
    SUM(IF(person_id = 101,total_amount,0)) as person_101, 
    SUM(IF(person_id = 102,total_amount,0)) as person_102, 
    SUM(IF(person_id = 103,total_amount,0)) as person_103 
FROM 
    my_table 
GROUP BY 
    date_time 
+0

由於這個工程.... 但是如果 我們可以營養不良的人口增加的人增加動態即104,105等數... e動態查詢返回的列數... –

+0

很高興我可以幫助:)歡呼隊友 – Stephan