所以我的情况很复杂。
我有 3 张桌子:
产品
资源名称 | 资源类型 |
---|---|
C1 | 粗体 |
E2 | 克丽玛 |
C2 | 粗体 |
C3 | 粗体 |
购买历史
资源名称 | 数量 | 客户 ID | 日期 | 批量 |
---|---|---|---|---|
C1 | 7 | 123 | 6 月 1 日 | 324 |
C1 | 7 | 222 | 6 月 10 日 | 324 |
C1 | 7 | 333 | 6 月 11 日 | 4BZ |
C1 | 7 | 124 | 6 月 11 日 | 4BZ |
C1 | 7 | 125 | 6 月 11 日 | 324 |
C1 | 7 | 111 | 6 月 21 日 | 324 |
C2 | 7 | 55 | 6 月 22 日 | A22 |
C2 | 7 | 1 | 6 月 24 日 | A22 |
库存
资源名称 | 可用 | 数量 | 批量 |
---|---|---|---|
C1 | 1 | 40 | 324 |
C2 | 1 | 50 | 3GC |
C1 | 2 | 0 | 4BZ |
C2 | 1 | 99 | A22 |
E2 | 1 | 99 | B22 |
E2 | 2 | 0 | C22 |
所以我创建了一个查询如下:
Select
p.resourcename
, ph.cust_id
, ph.batch
, case when i.available=1 then 'Yes' when i.available=2 then 'no' else ''end 'In Stock'
from product p
join purchase_history ph on ph.resource_name=p.resource_name
join inventory i on i.batch=ph.batch
where
ph.date >='Jun 1'
ph.date <='Jun 20'
我得到以下信息:
资源名称 | 客户 ID | 批量 | 有货 |
---|---|---|---|
C1 | 123 | 324 | 是 |
C1 | 222 | 324 | 是 |
C1 | 333 | 4BZ | 没有 |
C1 | 124 | 4BZ | 没有 |
C1 | 123 | 324 | 是 |
我想要实现的是下面的,即使最后2批次和产品在交易范围之外,我们仍然可以看到它们如下。我知道这很奇怪,但基本上团队希望看到到目前为止已售出的产品 - 在日期范围内 - 以及所有产品的可用性状态。这是可以实现的吗?
资源名称 | 客户 ID | 批量 | 有货 |
---|---|---|---|
C1 | 123 | 324 | 是 |
C1 | 222 | 324 | 是 |
C1 | 333 | 4BZ | 没有 |
C1 | 124 | 4BZ | 没有 |
C1 | 123 | 324 | 是 |
C2 | 不适用 | 3GC | 是 |
C2 | 不适用 | A22 | 是 |
E2 | 不适用 | B22 | 是 |
E2 | 不适用 | C22 | 没有 |
答案 0 :(得分:0)
您需要将 left join
与 purchase_history 表一起使用:
Select
p.resourcename
, ph.cust_id
, i.batch
, case when i.available=1 then 'Yes' when i.available=2 then 'no' else ''end 'In Stock'
from product p
join inventory i on i.resource_name=p.resource_name
left join purchase_history ph
on ph.resource_name=p.resource_name
and i.batch=ph.batch
where
ph.date >='Jun 1' and ph.date <='Jun 20'
请注意,我更改了表格的顺序以提高可读性。