商品表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的妙用的更多相关文章

  1. sql中NULL的问题

    sql中NULL的问题   今天一不小心在sql中写出以下脚本 select defaultPositionId from TableName where UserId=1100528 and def ...

  2. sql中null 和 ‘’(空字符串)

    sql 中 null  和 空字符串的区别方式 在Silverlight中  数据库 需要与实体类进行映射, 假如实体类不允许为null,则 select '' as 列名  from  表名字:   ...

  3. SQL中null比较的雷区

    SQL中遇到null要格外小心! oracle最坑: oracle中在可为null的字段上做逻辑关系运算要格外小心,如 <>,>,=,<,任何与null的运算结果都返回fals ...

  4. SQL中NULL值

    SQL的表达式,除了IS NULL和NOT NULL以外,只要出现NULL值结果都为FALSE 简单的例子: SELECT * FROM table WHERE name!='abc' 只要name值 ...

  5. sql中desc的妙用

    很多情况下对表内部结构不熟悉,想看下我创建的表里面又多少表明,又想他按照首字母的规律排列, 这时候就要用desc +表名了. desc t_bike_info; hive> desc t_bik ...

  6. SQL语句中=null和is null

    平时经常会遇到这两种写法:IS NOT NULL与!=NULL.也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合.实际上,是由于对二者使用区别理解不透彻. 默认情况下,推荐使用 IS ...

  7. sql server中NULL导入decimal字段时报错

    sql server中NULL导入decimal字段时报错 在导入CSV文件时,如果decimal字段为null值,导致文本文件入库时失败. 错误现象 构造例子 新建一张表,包含decimal字段. ...

  8. SQL中的Null深入研究分析

    SQL中的Null深入研究分析 虽然熟练掌握SQL的人对于Null不会有什么疑问,但总结得很全的文章还是很难找,看到一篇英文版的, 感觉还不错. Tony Hoare 在1965年发明了 null 引 ...

  9. SQL中空值与NULL区别

    很多人都有过这样的问题吧   在SQL中填充空值与NULL有什么区别 现在我以一个实例给大家分享一下自己的想法  恳请大家给予批评也指正 谢谢 创建一个监时表 CREATE TABLE #temp ( ...

随机推荐

  1. myeclipse2014黑色主题风格设置

    http://jingyan.baidu.com/article/915fc41494db8451384b2043.html?st=2&os=0&bd_page_type=1& ...

  2. 设置eclipse默认编码格式

    Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window->Prefere ...

  3. Python %操作符 字符串格式化

    %操作符(字符串格式化,string formatting),说明如下: %[(name)][flags][width].[precision]typecode (name)为命名 flags可以有+ ...

  4. 在正文部分操作accordion内容展开和闭合

    $('#accordionid').accordion("select",0);             //展开第一个title $('#accordionid').accord ...

  5. BZOJ1969: [Ahoi2005]LANE 航线规划(LCT)

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 587  Solved: 259[Submit][Status][Discuss] Description ...

  6. activemq的高级特性:通配符式分层订阅

    activemq的高级特性之通配符式分层订阅 队列的名称可以分层:aa.bb.cc.dd 可以匹配:aa.bb.cc.dd,aa.*.cc.dd,aa.> *:匹配当前层的内容 >:任何一 ...

  7. mysql/mariadb学习记录——连接查询(JOIN)

    //本文使用的数据表格//persons表中id_p为主键//orders表中id_o为主键,id_p为外键参考persons表中的id_p mysql> select * from perso ...

  8. 企业案例:查找当前目录下所有文件,并把文件中的https://www.cnblogs.com/zhaokang2019/字符串替换成https://www.cnblogs.com/guobaoyan2019/

    企业案例:查找当前目录下所有文件,并把文件中的https://www.cnblogs.com/zhaokang2019/字符串替换成https://www.cnblogs.com/guobaoyan2 ...

  9. PHP && ,and ,||,or 的区别

    PHP中的逻辑“与”运算有两种形式:AND 和 &&,同样“或”运算也有OR和||两种形式. 如果是单独两个表达式参加的运算,两种形式的结果完全相同,例如 $a AND $b和$a & ...

  10. 大数据分析系统Hadoop的13个开源工具

    Hadoop是由Apache基金会开发的一个大数据分布式系统基础架构,最早版本是2003年原Yahoo!DougCutting根据Google发布的学术论文研究而来. 用户可以在不了解分布式底层细节的 ...