我是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
答案 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);
这将为您提供满足您问题的发票/项目对列表。