首页 > 解决方案 > 未找到 SKU 时返回 0 数量

问题描述

我的数据库中有 2 个表:warehousewarehouse_inventory.

我的warehouse桌子看起来像:

 name   | warehouse_id   | 
--------+----------------|
 name_1 | warehouse_id_1 |
 name_2 | warehouse_id_2 |
 name_3 | warehouse_id_3 |

我的warehouse_inventory桌子看起来像:

 warehouse_id   | SKU         | quantity |         
----------------+-------------+----------|
 warehouse_id_1 | item_sku_1  | 100      |
 warehouse_id_2 | item_sku_1  | 100      |

现在,我正在寻找一种解决方案,它可以让我得到这样的结果:

 name   | warehouse_id   | SKU        | quantity |
--------+-----------------------------+----------|
 name_1 | warehouse_id_1 | item_sku_1 | 100      |
 name_1 | warehouse_id_1 | item_sku_2 | 0        |
 name_2 | warehouse_id_2 | item_sku_1 | 100      |
 name_2 | warehouse_id_2 | item_sku_2 | 0        |
 name_3 | warehouse_id_3 | item_sku_1 | 0        |
 name_3 | warehouse_id_3 | item_sku_2 | 0        |

where当我在 SQL 查询中选择条件时:

SELECT * FROM [what's here?] WHERE warehouse_inventory.SKU IN ('item_sku_1', 'item_sku_2')

标签: sqlpostgresql

解决方案


如果您的数据库中没有包含所有 SKU 的表,则无法执行此操作。

因此,假设您的所有项目主数据都有一个名为 [item] 的表,您应该这样做:

SELECT W0.name, W0.warehouse_id, I0.SKU, ISNULL(W1.quatity, 0) as 'Quantity'
FROM [item] I0
CROSS JOIN [warehouse] W0
LEFT JOIN [warehouse_inventory] W1 ON W1.warehouse_id = W0.warehouse_id AND W1.SKU = I0.SKU

在 SAP Business One 上,我们这样做:

SELECT W0.WhsName, W0.WhsCode, I0.ItemCode, ISNULL(W1.OnHand, 0) as 'Quantity'
FROM OITM I0
CROSS JOIN OWHS W0
LEFT JOIN OITW W1 ON W1.WhsCode = W0.WhsCode AND W1.ItemCode = I0.ItemCode
ORDER BY 1 DESC

推荐阅读