2012-09-15 69 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種類型。

我想結果爲

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

現在,我將它們組合在PHP中,這使得代碼一團糟,現在我希望有人能幫助我與MySQL

回答

2

我覺得你的預期輸出(結果)是錯誤的
它應該是:

NAME  VALUEB VALUEA 
-------------------------- 
100 Kasa 50000 30000 
200 Hello 0  3000 
645 Bye  1234 0 
80 Kasa  50  500 

您可以使用該

SUM功能具有CASE聲明:

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聲明:

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

See this SQLFiddle

如果你的預期輸出是這個樣子(NULL而不是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; 

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語句中我可以寫。無論如何,謝謝。 –

相關問題