2016-04-26 5 views
2

Я использую Postgres и у меня есть запрос, чтобы показать некоторые данные для SalesRep между двумя датами, но я также должен показать те, которые не имеют никаких продаж и у меня есть это:не SQL показывает нулевые значения между запросом

SELECT SALESREP.SALESREPID, COALESCE(SUM(ORDERLINE.QUANTITY),0) AS TOTALSALES, COALESCE(SUM(ORDERLINE.QUANTITY*ORDERLINE.UNITSELLINGPRICE),0) AS TOTALVALUE 
FROM SHOPORDER 
right JOIN SALESREP ON SALESREP.SALESREPID = SHOPORDER.SALESREPID 
left JOIN ORDERLINE ON ORDERLINE.SHOPORDERID=SHOPORDER.SHOPORDERID 
WHERE 
SHOPORDER.ORDERDATE BETWEEN '2010-01-01' AND '2016-04-30' or SHOPORDER.ORDERDATE is null 
GROUP BY SALESREP.SALESREPID 
ORDER BY TOTALVALUE desc 

, и это дает мне следующие результаты:

3;7;287.00 
2;9;190.88 
1;6;147.00 
4;1;59.00 
5;0;0 

, но когда я пытаюсь поставить дату в 2017 году он появляется только пятый ряд. Есть ли способ показать все 5 строк с 0 или совсем нет, поскольку у salesprop нет продаж в 2017 году?

Благодаря

ответ

0

Это звучит для меня, как вы хотите использовать саз:

http://www.postgresql.org/docs/current/static/functions-conditional.html

Пример:

postgres=# create table t (x int); 
CREATE TABLE 
postgres=# insert into t values (1); 
INSERT 0 1 
postgres=# insert into t values (NULL); 
INSERT 0 1 
postgres=# insert into t values (3); 
INSERT 0 1 
postgres=# select * from t; 
x 
--- 
1 

3 
(3 rows) 

postgres=# select (CASE WHEN x is NULL THEN 0 ELSE x END) from t; 
x 
--- 
1 
0 
3 
(3 rows) 
Смежные вопросы