商品表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. SQL-还原数据库,数据库提示正在还原中的处理办法

    还原数据库时,提示还原成功,可是数据库列表中该数据库显示正在还原中: 执行此命令即可: RESTORE DATABASE EnterPriseBuilding WITH RECOVERY 1. 至少有 ...

  2. JDBC——释放资源的代码

    public static void release(ResultSet rs, Statement statement, Connection conn) { if (rs != null) { t ...

  3. rman基础知识理解(一)

    rman用于对数据库的备份和恢复. 他的命令主要分成两大类:独立命令和批处理命令: 独立命令只能在rman的提示符下执行,主要的命令有: CONNECT CONFIGURE CREATE CATALO ...

  4. WebGl 利用缓冲区对象画多个点

    效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  5. Sppring MVC核心应用-2

    一.Spring MVC框架中400状态码的请求错误:控制台BindException异常, 解决方法: 二.Sping 表单标签 三.数据校验 实现JSR 303验证步骤 四.REST风格 五.Sp ...

  6. 安装Maven后使用cmd 执行 mvn -version命令 报错JAVA_HOME should point to a JDK not a JRE

    1. 可以执行maven指令,说明maven的配置没错 2. 打开cmd,在cmd输入: set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_91 3. 再测试是 ...

  7. JS参考手册

    一.JavaScript Core API 词法结构 字符集 使用Unicode字符集 注释 单行注释 //或HTML风格的<!-- 多行注释 /**/ 标识符 大小写 区分大小写 空格.换行. ...

  8. linux环境mysql的安装主从关系的配置

  9. 第一篇 C/C++基本语言类型

    总概: { C:面向过程,以过程为中心,以算法为驱动 } { C++:面向对象,以过对象中心,以消息为驱动 个人理解:一切皆对象的思想 } 一 前言总概 1.常量变量 初始化对象与赋值是两个概念 直接 ...

  10. mysql secure_file_priv 文件读写问题

    secure_file_priv特性 使用 show global variables like '%secure%'; 查询显示 secure_file_priv的值为null,那么secure_f ...