2017-12-27 20 views
0

SQLでWHERE句のために表示されない静的列を持つ最善の方法を知りたい。下の私のコードで私はデザイナーを持っています。 WHERE条件を満たしていなくても、WHEREの条件に関連した値を持っていても、デザイナーのすべてが表示されるようにしたいと思います。 SQLは変更されないが、必要に応じて他の列を更新する列の静的値を表示する

SELECT first_assigned_to AS Designer, 
      Count(DISTINCT quote_email) AS totalLeads 
    FROM quotes_new_assigned 
    WHERE date_first_assigned_to >= YEAR(CURDATE()) 
    GROUP BY designer 

この

adam 38 
bob 1711 
brenda 823 
chris 7 
dave 426 
diane 52 

これは私が(値は重要ではいけない、ちょうど公告を行うことを希望するものであるSELECTは、今年の終わりに私たちを与えるものですどのような引用符が割り当てられていないものがまだ表示されているか)

adam 0 
bob 0 
brenda 3 
chris 1 
dave 0 
diane 4 

答えて

2

これは、COUNTの中にCASE WHENを使用して行うことができます。

SELECT first_assigned_to AS Designer, 
Count(DISTINCT CASE WHEN date_first_assigned_to >= YEAR(CURDATE()) THEN quote_email END) AS totalLeads 
FROM quotes_new_assigned 
GROUP BY first_assigned_to; 
0

あなたが残っているデザイナーのリスト上の異なるクエリで労働組合を使用することができ

SELECT distinct a.first_assigned_to AS Designer, ifnull(t.totalLeads,0) 
    FROM quotes_new_assigned as a 
    LEFT JOIN (
    SELECT first_assigned_to AS Designer, 
      Count(DISTINCT quote_email) AS t.totalLeads 
     FROM quotes_new_assigned 
     WHERE date_first_assigned_to >= YEAR(CURDATE()) 
     GROUP BY designer 
) t on a.designer = t.designer 
    WHERE a.date_first_assigned_to >= YEAR(CURDATE()) 
0

あなたのデザイナーのためのサブクエリと明瞭に参加あなたは左を使用することができます。

SELECT first_assigned_to AS Designer, Count(DISTINCT quote_email) AS totalLeads 
WHERE date_first_assigned_to >= YEAR(CURDATE())  
GROUP BY designer 
UNION 
SELECT Distinct first_assigned_to AS Designer, 0 AS totalLeads 
WHERE date_first_assigned_to < YEAR(CURDATE() 
関連する問題