2014-07-09 49 views
0

我有以下模式:組查詢結果來獲得這種格式

a VARCHAR(255), 
b INTEGER, 
c INTEGER, 
d TEXT 

在我的數據庫中,如果d不爲空,則c爲0。我想這樣做的是組中的所有列,其有相同的a s和等於b s。但是,我想使用結果cd(如果有的話)的非空值的總和。舉例來說,如果我的數據是這樣的:

"XXX" 100 1 NULL 
"XXX" 100 1 "my text" 
"YYY" 5 1 NULL 
"YYY" 7 0 "other text" 

我想結果是:

"XXX" 100 2 "my text" 
"YYY" 5 1 NULL 
"YYY" 7 0 "other text" 

有一個查詢,我可以使用,這將做到這一點?

回答

1

您可以使用GROUP_CONCAT列d的值連接成一個字段

SELECT a, b, SUM(c), GROUP_CONCAT(d) 
FROM table 
GROUP BY a, b 
ORDER BY a asc, b asc 

如果你有兩排像

"XXX", 100, 0, "Some Text" 
"XXX", 100, 0, "Some More Text" 

這將返回

"XXX", 100, 0, "Some Text,Some More Text" 

但是,如果你有三排:

"XXX", 100, 0, "Some Text" 
"XXX", 100, 0, "Some More Text" 
"XXX", 100, 1, NULL 

你會得到

"XXX", 100, 1, "Some Text,Some More Text" 

(即空就會消失。使用合併,如果你需要保持一個佔位符)

0

我這樣做只是使用max()

select a, b, sum(c) as c, max(d) as d 
from table t 
group by a, b;