我有两张桌子;SalesData 和 AllOffers。
SalesData 表有 Brand(永远不能为 null)、Product type(可以为 null)、Lot(永远不能为 null)、Size of product(永远不能为 null)、Stage(永远不能为 null)、Province(将为 null)如果 Stage = "WIP")、Packed On Date(永远不能为 null)和 Quantity(永远不能为 null)。
AllOffers 表有 Province(永远不能为 null)、Offer number(永远不能为 null)、Product Type(可以为 null)、Brand(永远不能为 null)、Product Size(永远不能为 null)、Lot(永远不能为null)、Packed on date(永远不能为 null)、Quantity(永远不能为 null)和 Offer Status(永远不能为 null)。
我有一个带有两个窗格的应用程序。在左侧窗格中,用户根据 SalesData 中可用的批次创建“报价”,右侧窗格显示带有附加“可用数量”列的 SalesData 表,该列在用户创建报价时动态计算。
数据需要按省、阶段、产品类型、尺寸和包装日期分组,以提供可用数量。由于省和产品类型中的空值,我无法对数据进行分组。
这就是我所拥有的
SELECT
SalesData.Province,
SalesData.Stage,
SalesData.ProdType,
SalesData.Brand,
SalesData.Size,
SalesData.Lot,
SalesData.PackedOn,
SalesData.Qty,
CAST(SalesData.Qty AS decimal(12, 0)) - CAST(AllOffersSub.Qty AS decimal(12, 0)) AS Available
FROM
SalesData LEFT OUTER JOIN
(
SELECT
Province,
Brand,
Stage,
Lot,
Size,
PackedOn,
ProdType,
SUM(CAST(Quantity AS decimal(12, 0))) AS Qty
FROM
AllOffers
WHERE
(OfferStatus = 'Unconfirmed')
OR (OfferStatus = 'Confirmed')
GROUP BY
Province,
Brand,
Stage,
Lot,
Size,
PackedOn,
ProdType
) AS AllOffersSub ON
AllOffersSub.Brand = SalesData.Brand
AND AllOffersSub.Lot = SalesData.Lot
AND AllOffersSub.Size = SalesData.Size
AND AllOffersSub.PackedOn = SalesData.PackedOn
AND AllOffersSub.Stage= SalesData.Stage
AND CASE
WHEN SalesData.Province IS NULL THEN 1
WHEN AllOfferssub.Province = SalesData.Province THEN 1
ELSE 0 END =1
AND CASE
WHEN SalesData.ProdType IS NULL AND AllOffersSub.ProdType IS NULL THEN 1
WHEN AllOfferssub.ProdType = SalesData.ProdType THEN 1
ELSE 0
END = 1;
问题是很多可以显示为 WIP(正在进行的工作,这意味着省=Null)和 FG(完成好,这意味着省不会为空)。对于这样的批次,没有进行分组,我最终得到了一批具有相同包装日期、阶段、产品类型、尺寸的批次,显示的次数与该批次相关的订单数量一样多。
有没有办法根据标准进行选择性分组?例如,如果 stage = "WIP",则按阶段、产品类型、尺寸和包装日期分组,否则按阶段、产品类型、尺寸和包装日期分组?
这是 Offer 表的示例:
ID|Customer|OfferNum|Stage|ProdType|Brand|Size|Lot|PackedOn|Quantity|Status
1 |A | A1 |WIP | Null |test |Tst |aaa|1/1/2020|100 |Confirmed
2 |B | B1 |WIP | Null |test |Tst |aaa|1/1/2020|100 |Unconfirmed
3 |C | C1 |WIP | Null |test |Tst |aaa|1/1/2020|100 |Unconfirmed
4 |C | C1 |FG | Null |test |Tst |aaa|1/1/2020|100 |Unconfirmed
这是 SalesData 表的示例:
ID|Brand|ProdType|Lot|Size|Stage|Customer|PackedOn|Qty
1 |test | Null |aaa|Tst |WIP |Null |1/1/2020|1000
2 |test | Null |aaa|Tst |FG |C |1/1/2020|1000
查询的结果是:
Customer|Stage|ProdType|Brand|Size|Lot|PackedOn|Qty |Available
Null |WIP | Null |test |Tst |aaa|1/1/2020|1000|900
Null |WIP | Null |test |Tst |aaa|1/1/2020|1000|900
Null |WIP | Null |test |Tst |aaa|1/1/2020|1000|900
C |FG | Null |test |Tst |aaa|1/1/2020|1000|900
结果应该是:
Customer|Stage|ProdType|Brand|Size|Lot|PackedOn|Qty |Available
Null |WIP | Null |test |Tst |aaa|1/1/2020|1000|700
C |FG | Null |test |Tst |aaa|1/1/2020|1000|900