2012-09-21 34 views
0

你好,這裏是我的查詢:集團由X和計算在同一山坳中的空白

SELECT 
    CONCAT(YEAR(prm.fromdt) , '|', MONTH(prm.fromdt)) AS k, 
    CONCAT(YEAR(prm.fromdt) , ' - ', MONTH(prm.fromdt)) AS v, 
FROM prm 
GROUP BY k 
ORDER BY `k` DESC 

至極返回:

K  V 
2009|7 2009 - 7 
2009|6 2009 - 6 
NULL NULL 

有沒有辦法代替NULL NULL得到我有多少空值有。像

K  V 
2009|7 2009 - 7 
2009|6 2009 - 6 
Nulls 6 

回答

2

你可以這樣做:

SELECT CONCAT(YEAR(prm.fromdt) , '|', MONTH(prm.fromdt)) AS k, 
     coalesce(CONCAT(YEAR(prm.fromdt) , ' - ', MONTH(prm.fromdt)), cast(count(*) as varchar(255)) AS v 
FROM prm 
GROUP BY k 
ORDER BY `k` DESC 

我不喜歡在一列中混合不同類型的數據。但是,這可能會滿足您的需求。

+0

大家都反對混合類型之後,我會盡量避免這種情況。感謝你的回答。 – Martin

2

東西添加COUNT()

SELECT 
    CONCAT(YEAR(prm.fromdt) , '|', MONTH(prm.fromdt)) AS k, 
    CONCAT(YEAR(prm.fromdt) , ' - ', MONTH(prm.fromdt)) AS v, 
    COUNT(*) AS c 
FROM prm 
GROUP BY k 
ORDER BY `k` DESC 

應返回

k    v    c 
2009|7 2009 - 7 {count of this group} 
2009|6 2009 - 6 {count of this group} 
NULL NULL   6 
+0

這個想法是不加新col – Martin

+0

@Martin爲什麼不能?新的col比其他值的mess count值更好。 – xdazz

+0

我會按照你的意見,我會分開計數值。全部10倍。 – Martin

0

基本的SQL是:

COUNT(somefield) WHERE prm.fromdt IS NULL 

但如何實際使用這個要看你到底在做什麼。這聽起來像你想要的是不一樣的,你正在做的日期。如果混合使用這兩者,可能會很麻煩。在回答

+0

我不知道是否有一種方法可以在不添加新列的情況下在一個查詢中執行此操作,因爲我在處理二維數組後遇到沉重的PHP – Martin

1

建築物的xdazz:

select k, case when v is null then c else v end as v 
from 
(
SELECT 
    CONCAT(YEAR(prm.fromdt) , '|', MONTH(prm.fromdt)) AS k, 
    CONCAT(YEAR(prm.fromdt) , ' - ', MONTH(prm.fromdt)) AS v, 
    COUNT(*) AS c 
FROM prm 
GROUP BY k 
) x 
ORDER BY `k` DESC 

但dazz所指出的,你再混合列類型。您可以輕鬆地將計數轉換爲字符串值,但這並不能解決消費者在列v中隱式獲取混合數據類型的事實。