首页 > 解决方案 > SQL:过滤后合并列值

问题描述

我有两个表:表 1 即“mt000”包含:(代码、项目名称、ID)。

代码 项目名 ID
01 红色的 XXXX
02 灰色的 XXXY
03 黑色的 XXYY

表 2 即“vwExtended_bi”包含:(ID、日期、销售人员、数量):

ID 日期 销售员 账单数量
XXYY 2021 年 1 月 5 日 哈利 100
XXXY 2021 年 10 月 5 日 马特 100
XXYY 2021 年 5 月 20 日 马特 500

我想要得到的是在我选择的两个特定日期之间按 Sales_man 进行过滤。我的表 2 没有给出“biBillQty”列为空的结果。

我设法一次过滤上述条件之一,但不能同时过滤它们。这是我能想到的最好的代码:

select
    mt000.Code,
    mt000.LatinName,
    (Case when biBillQty is null then '0' else biBillQty end) AS QTY
from  mt000
left join vwExtended_bi on mt000.GUID = vwExtended_bi.biMatPtr
where (biBillQty LIKE '%'  OR biBillQty is NULL)
group by
    mt000.Code,
    mt000.LatinName,
    vwExtended_bi.biBillQty

目标是:

  1. 让所有项目甚至显示为空
  2. 应用两个过滤器:按 Sales_man 和日期
  3. 将两个条件都为真的数量合并到每个项目或 ID 的一行中

例如这个

ID 日期 销售员 账单数量
XXXY 2021 年 1 月 5 日 哈利 100
XXXY 2021 年 10 月 5 日 马特 100
XXYY 2021 年 5 月 20 日 马特 500

例如,如果我选择按 Sales_man 过滤,则要像这样:

ID 项目名 账单数量
XXXY 灰色的 200
XXYY 黑色的 500

日期仅用于过滤,因此不需要显示在结果中

标签: sqlfiltermerge

解决方案


推荐阅读