簡體   English   中英

如何在SUM中使用帶有CASE的WHERE子句?

[英]How do I use a WHERE clause with a CASE inside a SUM?

我有兩個表,一個是任務列表。 每個任務(行)由一對唯一的story_idpos_id (銷售點ID)指定,並包括last_completed日期。 另一個表是具有priority編號的POS列表。

這就是我需要的 :我將要求每個任務x包括自上次完成以來的時間除以其POS的優先級數量。 我需要每個故事的所有x的總和超過所有故事的POS。

最重要的是,一些任務從未完成,所以last_completedNULL ; 對於那些任務,我想將x設置為10。

這是我嘗試過的,但我在WHERE上收到錯誤:

SELECT t.story_id, SUM(
  CASE
    WHEN t.last_completed IS NULL THEN 10
    ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
  END
WHERE t.pos_id = p.id) AS weeks
FROM test_task t, test_pos p
GROUP BY story_id;

我也嘗試了與ELSE在同一行的WHERE子句,但這也沒有用。

誰能告訴我如何將prioritySUMCASElast_completed日期相關聯?

據推測,這是您想要的查詢:

SELECT t.story_id,
       SUM(CASE WHEN t.last_completed IS NULL THEN 10
                ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
           END) as weeks
FROM test_task t JOIN
     test_pos p
     ON t.pos_id = p.id
GROUP BY story_id;

您的條件應該在on子句中用於顯式join 這與select子句中的case表達式無關。

你已經亂序的條款- from應該來之前where 此外,您需要關閉sum的括號:

SELECT t.story_id, SUM(
  CASE
    WHEN t.last_completed IS NULL THEN 10
    ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
  END) AS weeks
FROM test_task t, test_pos p
WHERE t.pos_id = p.id
GROUP BY story_id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM