ERP的复杂查询建议

时间:2017-08-05 15:04:18

标签: sql-server sql-server-2005

我是SQL的新手。虽然,我可以编写基本联接,但我的经理要求我提供一份报告,其中包含以下要求。

他想找到所有相同物品存在但发货不同的发票。

从表格结构的角度来看:

TBL_ITEM (Table)
ITEM_ID (PK)
ITEM_NAME

TBL_PACKING (Table)
PACKING_ID (PK)
PACKING

TBL_INVOICE(Table)
INVOICE_ID (PK)
ITEM_ID (FK)
PACKING_ID (FK)

PS:我已经删除了不需要的列..

现在基于上面的表结构,这是场景。

1)买方A在一张发票中购买了两件不同的商品但包装相同 - 由于商品不同,这不应该是列表的一部分

2)买方B在单张发票中以相同包装购买了两件物品 - 需要此列表

3)买方C购买了一件带有两种不同包装的商品 - 需要此列表

请考虑所有方案都适用于发票,因此分组应首先在发票级别,然后在项目级别......要精心设计:

买方D在三张不同的发票中买了三件物品

Invoice 1: Item A; packing 1kg
Invoice 2: Item B; packing 2kg
Invoice 3: Item A; packing 1kg; Item B; 2kg

对于买方D方案,它应该出现在报告上,因为每张发票都没有相同或不同包装的商品组合。

我已经尝试过分组和光标,但我认为它不正确。想知道这是否可以通过查询实现,如果有人可以提供帮助,那就太棒了。

我正在使用MS SQL 2005

1 个答案:

答案 0 :(得分:1)

这很简单。您可以获取正在执行的项目列表:

select i.invoice_id, i.item_id
from tbl_invoice i
group by i.invoice_id, i.item_id
having min(i.packing_id) <> max(i.packing_id);

这将为您提供满足您问题的发票/项目对列表。