sql 如何对返回为空值指定值

redstar66 2013-01-10 03:11:02

select COALESCE(t1.名称,'方便面) as 名称,COALESCE(sum(t1.数量),0) 出库量 from 出库明细 t1,出库单 t2 where t1.出库编号=t2.出库编号 and t1.名称 like '%方便面%' group by 名称

没有查询到记录,返回以下结果:
名称 数量

实际想要的达到以下结果
名称 数量
方便面 0

-------------------------------------------------------------------
select COALESCE(sum(t1.数量),0) 出库量 from 出库明细 t1,出库单 t2 where t1.出库编号=t2.出库编号 and t1.名称 like '%方便面%'

这一句可以实现为
数量 0

不知道为什么加了一个字段就不可以了
...全文
322 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
szm341 2013-01-10
  • 打赏
  • 举报
回复
这个主要是group by的缘故,若不加group by那么全表sum,查询不到值sum会返回null 但是加了group by,那表中查询不到“方便面”的数据,group by是不会返回任何值的 连null也不会,所以函数就没用了
我腫了 2013-01-10
  • 打赏
  • 举报
回复
你表里沒有數據,沒有數據時使用匯總函數會返回NULL(除了Count會返回0). 還有就是沒有數據時使用 group by 就算使用匯總函數也不會返回任何結果.
USE test
GO


SELECT  COALESCE(SUM(col),1) AS sum_result FROM (SELECT CAST(NULL AS INT) AS col WHERE 1=2 ) AS t
SELECT  COALESCE(COUNT(col),1) AS count_result FROM (SELECT CAST(NULL AS INT) AS col WHERE 1=2 ) AS t
SELECT  COALESCE(MAX(col),1) AS max_result FROM (SELECT CAST(NULL AS INT) AS col WHERE 1=2 ) AS t
SELECT  COALESCE(MIN(col),1) AS mix_result FROM (SELECT CAST(NULL AS INT) AS col WHERE 1=2 ) AS t
SELECT  COALESCE(AVG(col),1) AS avg_result FROM (SELECT CAST(NULL AS INT) AS col WHERE 1=2 ) AS t

/*

sum_result
-----------
1

(1 個資料列受到影響)

count_result
------------
0

(1 個資料列受到影響)

max_result
-----------
1

(1 個資料列受到影響)

mix_result
-----------
1

(1 個資料列受到影響)

avg_result
-----------
1

(1 個資料列受到影響)

*/


SELECT COALESCE(col,1) AS nl_result FROM (SELECT CAST(NULL AS INT) AS col WHERE 1=2 ) AS t
GROUP BY col

/*
result
-----------

(0 個資料列受到影響)

*/


KevinLiu 2013-01-10
  • 打赏
  • 举报
回复
第一个值NAME找不到值,所以不会有值 第二个也没有所以会返回0(ISNULL(0))
發糞塗牆 2013-01-10
  • 打赏
  • 举报
回复
1、先看是否有数据。2、简单的话就用isnull函数吧
qqqqqqqq_2013 2013-01-10
  • 打赏
  • 举报
回复
引用 1 楼 xiangyuhm 的回复:
引用 楼主 redstar66 的回复: select COALESCE(t1.名称,'方便面) as 名称,COALESCE(sum(t1.数量),0) 出库量 from 出库明细 t1,出库单 t2 where t1.出库编号=t2.出库编号 and t1.名称 like '%方便面%' group by 名称 没有查询到记录,返回以下结果: 名称 数量 实际想要的达到以……
第二种情况下要保证有名称包含“方便面”字符的数据才能查到结果
qqqqqqqq_2013 2013-01-10
  • 打赏
  • 举报
回复
引用 楼主 redstar66 的回复:
select COALESCE(t1.名称,'方便面) as 名称,COALESCE(sum(t1.数量),0) 出库量 from 出库明细 t1,出库单 t2 where t1.出库编号=t2.出库编号 and t1.名称 like '%方便面%' group by 名称 没有查询到记录,返回以下结果: 名称 数量 实际想要的达到以下结果 名称 数量 方便面 0 ……
这个和where 条件有关系: “t1.名称 like '%方便面%'” 加这个条件的话那就是只取名称里包含有“方便面”字符的数据,所以你查出的数据里的 “名称不可能为null”,你要是允许名称为空那就把这个条件去了,你要是一定要取这个条件下的数据的话那select 的时候就不要 COALESCE(t1.名称,'方便面) as 名称 而是直接写 t1.名称

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧