SQL中NULL的妙用
商品表Products
库房表WarehouseDistrict
库存表WarehouseStock
一般写法
DECLARE @districtId INT = 2454 ;WITH stock
AS
(
SELECT DistrictId, ProductId
, ws.Inventory
FROM dbo.WarehouseDistrict wd
INNER JOIN dbo.WarehouseStock ws
ON ws.IsOffMarket = 0 AND wd.WarehouseId = ws.WarehouseId WHERE wd.IsDelete = 0
AND (0 = ISNULL(@districtId, 0) OR wd.DistrictId = @districtId)
GROUP BY DistrictId, ProductId, ws.Inventory
)
SELECT a.DistrictId, a.ProductId, ISNULL(b.Inventory, 0) Inventory
FROM stock a
LEFT JOIN (SELECT DistrictId, ProductId, MIN(Inventory) Inventory
FROM stock
WHERE Inventory > 0 /*小于0的,忽略*/
GROUP BY DistrictId, ProductId) b
ON a.DistrictId = b.DistrictId
AND a.ProductId = b.ProductId
利用聚合函数忽略NULL
DECLARE @districtId INT = 2454 SELECT DistrictId, ProductId
, ISNULL( MIN(CASE WHEN ws.Inventory <= 0 THEN NULL ELSE ws.Inventory END), 0) Inventory
FROM dbo.WarehouseDistrict wd
INNER JOIN dbo.WarehouseStock ws
ON ws.IsOffMarket = 0
--AND ws.Inventory > 0 /*小于0的,忽略*/ AND wd.WarehouseId = ws.WarehouseId WHERE wd.IsDelete = 0
AND (0 = ISNULL(@districtId, 0) OR wd.DistrictId = @districtId)
GROUP BY DistrictId, ProductId
SQL中NULL的妙用的更多相关文章
- sql中NULL的问题
sql中NULL的问题 今天一不小心在sql中写出以下脚本 select defaultPositionId from TableName where UserId=1100528 and def ...
- sql中null 和 ‘’(空字符串)
sql 中 null 和 空字符串的区别方式 在Silverlight中 数据库 需要与实体类进行映射, 假如实体类不允许为null,则 select '' as 列名 from 表名字: ...
- SQL中null比较的雷区
SQL中遇到null要格外小心! oracle最坑: oracle中在可为null的字段上做逻辑关系运算要格外小心,如 <>,>,=,<,任何与null的运算结果都返回fals ...
- SQL中NULL值
SQL的表达式,除了IS NULL和NOT NULL以外,只要出现NULL值结果都为FALSE 简单的例子: SELECT * FROM table WHERE name!='abc' 只要name值 ...
- sql中desc的妙用
很多情况下对表内部结构不熟悉,想看下我创建的表里面又多少表明,又想他按照首字母的规律排列, 这时候就要用desc +表名了. desc t_bike_info; hive> desc t_bik ...
- SQL语句中=null和is null
平时经常会遇到这两种写法:IS NOT NULL与!=NULL.也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合.实际上,是由于对二者使用区别理解不透彻. 默认情况下,推荐使用 IS ...
- sql server中NULL导入decimal字段时报错
sql server中NULL导入decimal字段时报错 在导入CSV文件时,如果decimal字段为null值,导致文本文件入库时失败. 错误现象 构造例子 新建一张表,包含decimal字段. ...
- SQL中的Null深入研究分析
SQL中的Null深入研究分析 虽然熟练掌握SQL的人对于Null不会有什么疑问,但总结得很全的文章还是很难找,看到一篇英文版的, 感觉还不错. Tony Hoare 在1965年发明了 null 引 ...
- SQL中空值与NULL区别
很多人都有过这样的问题吧 在SQL中填充空值与NULL有什么区别 现在我以一个实例给大家分享一下自己的想法 恳请大家给予批评也指正 谢谢 创建一个监时表 CREATE TABLE #temp ( ...
随机推荐
- 32位 的变量 用于表示 ms ,可以表示多少天那?
1.在 TI 的 BLE 协议栈 中,即 OSAL 中 获取当前 系统 tick 的方法如下 /* * Read the system clock - returns milliseconds * ...
- 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...
- 【2008-2009 ICPC NEERC D】Deposits(暴力)
题目链接 题意: 给你n个数a[i],m个数b[i],求出有几对数满足a[i]能整除b[i]. 思路: 直接暴力,先将第一组数存入a数组,第二组数存入b数组,然后在第二组数中遍历它整数倍的数(在10^ ...
- HP-Socket国产优秀socket通信组件推荐
来源:http://blog.csdn.net/clb929/article/details/51085983 * HP-Socket 官方网站:http://www.jessma.org * HP- ...
- jQuery实现页面回到顶部功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- vue--slot插槽的使用方式
slot 插槽可以在子组件中为父组件要传递的标签占位置 能够有效的减少代码冗余 使代码更加有逼格 第一个例子 <body> <div class="app"& ...
- [原]nginx 一下快一下慢的问题
在本机用thinkphp建了一个小网站,没任何问题,发布到云空间,就出现访问很慢的情况,而且是一下快一下慢,奇数次快,偶数次慢 换了一台win10的笔记本,情况一样,更新了phpstudy更新了thi ...
- IComparer 与 IComparable
static void Main() { var people = new ArrayList(); people.AddRange(new ArrayList { }, }, }, } }); Co ...
- Mysql修改密码以及权限问题
mysql修改密码小步骤 错误分析: 一开始是密码错误导致,先添加skip-grant-tables(这个配置无视权限的,添加直接回车登录即可),尽心修改密码,发现错误照旧 百度了一下,发现是mysq ...
- 解决Stm32出现error: #20: identifier "GPIO_InitTypeDef" is undefined异常
该错误是我在移植sd卡程序时出现的,错误如下: error:#20,查看错误,可以发现,这些变量都是系统定义过的,没有修改过.并且该变量也能成功跳转被找到.那么到底是什么原因呢?逛了一些帖子,尝试了好 ...