2011-09-01 28 views
1

我在下面的請求中遇到問題!SQL /合併 - 錯誤的行名稱

請求:

SELECT COALESCE(date(date_field), 'Total') AS "date_field_group", 
COUNT(id_field) AS "Nombre de bookings", 
CONCAT(REPLACE(REPLACE(FORMAT(SUM(price1) , 2) , ',', ' ') , '.', ',') , ' €') AS "Total à l'achat", 
CONCAT(REPLACE(REPLACE(FORMAT(SUM(price2) , 2) , ',', ' ') , '.', ',') , ' €') AS "Total à la vente", 
CONCAT(REPLACE(REPLACE(FORMAT(SUM(price2) - SUM(price1) , 2) , ',', ' ') , '.', ',') , ' €') AS 'Marge', 
CONCAT(REPLACE(FORMAT((SUM(price2)/SUM(price1)) , 2) , '1.', '') , ' ', '%') AS "Markup moyen" 
FROM table1 S, table2 B 
WHERE status_field 
IN ("1", "5") 
AND DATE(date_field) BETWEEN "2011-08-01" AND "2011-08-31" 
AND type_field = "H" 
AND price1 IS NOT NULL 
AND S.id_field = B.id_field 
AND B.id2 = "1" 
GROUP BY date_field_group WITH ROLLUP 

的事情是,請求工作正常(右數),但在最後一行,我預計在第一行「總」來獲得,而是中,我得到了一個字段NULL ...

有人知道我的請求有什麼問題嗎? Thx尋求幫助;)。

回答

1

你查詢幾乎正確(除了使用隱式SQL '89連接,這是一個SQL反模式)

的問題是在最後一行:GROUP BY ... WITH ROLLUP
累積得到應用很晚在這個過程中,你的COALESCE(date(date_field), 'Total')後。
所以聚結已經由時間累積完成走來,你需要重寫查詢,像這樣:

SELECT COALESCE(date_field_group, 'Total') as date_field_group 
    , `Nombre de bookings` 
    , `Total à l'achat` 
    , `Total à la vente` 
    , `Marge` 
    , `Markup moyen` 
FROM (
    SELECT date(date_field) AS "date_field_group", 
    COUNT(id_field) AS "Nombre de bookings", 
    CONCAT(REPLACE(REPLACE(FORMAT(SUM(price1) , 2) , ',', ' ') , '.', ',') , ' €') AS "Total à l'achat", 
    CONCAT(REPLACE(REPLACE(FORMAT(SUM(price2) , 2) , ',', ' ') , '.', ',') , ' €') AS "Total à la vente", 
    CONCAT(REPLACE(REPLACE(FORMAT(SUM(price2) - SUM(price1) , 2) , ',', ' ') , '.', ',') , ' €') AS 'Marge', 
    CONCAT(REPLACE(FORMAT((SUM(price2)/SUM(price1)) , 2) , '1.', '') , ' ', '%') AS "Markup moyen" 
    FROM table1 S 
    INNER JOIN table2 B ON (S.id_field = B.id_field) 
    WHERE status_field IN ("1", "5") 
    AND DATE(date_field) BETWEEN "2011-08-01" AND "2011-08-31" 
    AND type_field = "H" 
    AND price1 IS NOT NULL  
    AND B.id2 = "1" 
    GROUP BY date_field_group WITH ROLLUP) AS subquery 
+1

它的工作原理!非常感謝你的解釋。順便說一句,我不知道這種隱式連接是反模式,所以再次感謝! 這幫了我很多;) –