2012-11-05 54 views
0

我有一個包含3個字段的表。此表記錄了最近30天內每天到相關國家的通話時間記錄。在考慮null的情況下在MySQL中使用GROUP_CONCAT

C_Date  Country   C_Time 
2012-10-01 India   1316 
2012-10-01 USA    12 
2012-10-01 UK    132  
2012-10-01 Kuwait   134  
2012-10-02 UK    135  
2012-10-02 USA    136  
2012-10-02 Singapore  137  

我需要使用這些記錄生成一個表和一個線圖,我試圖寫MySQL查詢。基本上我需要僅爲選定的國家繪製這個。假設我想要印度,美國和英國;然後我需要拉設置這樣的記錄:

C_Date  | Calling_Time 
-----------+---------------------------------- 
2012-10-01 | 1316,12,132 
2012-10-02 | 0,136,135 
2012-10-03 | ... 
...  | ... 

這是我的查詢:

SELECT C_Date, GROUP_CONCAT(C_Time 
ORDER BY Country 
SEPARATOR ',') as Calling_Time 
FROM Call_Table t 
WHERE Country 
IN ('India', 'USA', 'UK') 
GROUP BY C_Date 
ORDER BY C_Date 

結果是非常接近,但它忽略了空的結果。

C_Date  | Calling_Time 
-----------+---------------------------------- 
2012-10-01 | 1316,12,132 
2012-10-02 | 136,135 (expected 0,136,135) 

我可以改變我的查詢來獲取Calling_Time像 OR ,136135 OR 空,136135?(有段獨特的數字來表示每個國家)

在感謝提前!

回答

2

嘗試此查詢 -

SELECT 
    C_Date, 
    CONCAT(MAX(IF(country = 'India', C_Time, 0)), ',', 
     MAX(IF(country = 'USA', C_Time, 0)), ',', 
     MAX(IF(country = 'UK', C_Time, 0))) Calling_Time 
    FROM call_table 
    GROUP BY C_Date 

+------------+--------------+ 
| C_Date  | Calling_Time | 
+------------+--------------+ 
| 2012-10-01 | 1316,12,132 | 
| 2012-10-02 | 0,136,135 | 
+------------+--------------+ 
+0

這就像一個魅力! :-)非常感謝Devart! –

2
SELECT aa.C_Date, 
     GROUP_CONCAT(COALESCE(bb.C_Time,0) ORDER BY bb.Country) Calling_Time 
FROM 
(
    SELECT a.Country, b.C_DATE 
    FROM 
      ( 
       SELECT DISTINCT Country 
       FROM TableName t 
       WHERE Country IN ('India', 'USA', 'UK') 
     ) a CROSS JOIN 
      (
       SELECT DISTINCT DATE(C_Date) C_Date 
       FROM TableName t  
     ) b 
) aa LEFT JOIN TableName bb 
    ON aa.Country = bb.Country AND 
     aa.C_DATE = DATE(bb.C_DATE) 
GROUP BY aa.C_Date 
相關問題