sql在查询之间不显示空值

Posted

技术标签:

【中文标题】sql在查询之间不显示空值【英文标题】:sql not showing null values in between query 【发布时间】:2016-04-26 15:08:25 【问题描述】:

我正在使用 postgres,我有一个查询来显示两个日期之间的销售代表的一些数据,但我还需要显示那些没有销售的数据,我有这个:

    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 或根本不显示,因为 2017 年没有销售代表有销售?

谢谢

【问题讨论】:

【参考方案1】:

在我看来,您希望使用 CASE 语句:

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)

【讨论】:

以上是关于sql在查询之间不显示空值的主要内容,如果未能解决你的问题,请参考以下文章

sql空值值转化为0

sql怎么判断一个值是不是为空

sql中更新某个字段中部分空值的语句怎样写?

oracle数据库中如何使得插入的空值不显示为null

SQL问题求助,查询结果如何清除NULL的空值

SQL 查询显示了良好的数据库值,但 LINQ to Entity 框架从无处获得空值