2016-11-27 41 views
0

是屬於較大查詢的一部分的CTE。我試圖嘗試一些簡單的方法:使用「2016-10」更新或替換「2016-11」或「2016-12」值的所有記錄。在公共表格表達式中使用更新

查詢在UPDATE處運行時發生錯誤。這裏有沒有替代方法可以使這個查詢工作?

with q (month, cobrand, members) as 
(select date_trunc('month',optimized_transaction_date), cobrand_id, 
count(distinct unique_mem_id) 
from yi_fourmpanel.card_panel 
Where (cobrand_id = '10001372' or cobrand_id = '10005640' or cobrand_id = '10005244') 
group by 1,2) 

UPDATE q 
SET members = dc 
FROM (SELECT cobrand, members dc 
     FROM q 
     WHERE month = '2016-10') x 
WHERE q.cobrand = x.cobrand 
AND month IN ('2016-11', '2016-12') 
+0

注意,我不是要值插入通過匯聚/組,但更換輸出的記錄。謝謝。 – ZJAY

回答

0

如果您不想更改表格數據,請不要使用UPDATE

達到你想要做的,寫類似這樣的主要查詢的內容:

WITH q(month, cobrand, members) AS (...) 
SELECT 
    month, 
    cobrand, 
    CASE WHEN month IN ('2016-11', '2016-12') 
     THEN (SELECT members 
       FROM q q1 
       WHERE q1.month = '2016-10') 
     ELSE members 
    END 
FROM q; 
+0

感謝您的回覆。我花了一個多小時試圖實現你的代碼,但我沒有成功。您介意如何使用我在上面分享的輸入來實現此代碼?請記住,我最初使用更新,因爲我想在2016 - 2016年和2016 - 12年使用2016-10的結果。 – ZJAY

+0

如果你用你的CTE替換省略號(...),我的查詢應該就像我寫的一樣。如果您遇到錯誤,請分享。我無法嘗試,因爲你沒有共享數據或表結構。 –

相關問題