我有一张销售订单表:
SALESORDERCODE ITEMCODE WAREHOUSECODE
SO-605338 ITEM-003200 MAIN
SO-605338 ITEM-016328 PFC
我还有一个库存表:
WAREHOUSECODE ITEMCODE UNITSINSTOCK
MAIN ITEM-003200 1
MAIN ITEM-016328 2
PFC ITEM-016328 3
PFC ITEM-003200 4
任何人都可以帮助我输出一系列连接:
SALESORDERCODE ITEMCODE UNITS IN MAIN UNITS IN PFC
SO-605338 ITEM-003200 1 3
SO-605338 ITEM-016328 2 4
我可以编写一个WHERE
子句,输出MAIN或PFC,但我需要并排列。
感谢您的帮助!
答案 0 :(得分:2)
您可以使用INVENTORY
表上的2个JOIN获得结果 - 您希望列中的每个WarehouseCode
加入一个:
select
so.SALESORDERCODE,
so.ITEMCODE,
i_main.UNITSINSTOCK UnitsInMain,
i_pfc.UNITSINSTOCK UnitsInPFC
from SalesOrder so
left join Inventory i_main
on so.ItemCode = i_main.ItemCode
and i_main.WAREHOUSECODE = 'Main'
left join Inventory i_pfc
on so.ItemCode = i_pfc.ItemCode
and i_pfc.WAREHOUSECODE = 'PFC';
见SQL Fiddle with Demo。您会注意到,当您在INVENTORY
表上左键加入时,您将包含要返回的WarehouseCode
的过滤器。
如果您需要每个仓库中的总计单位,并不完全清楚,如果是这样,那么可以使用带有CASE表达式的聚合函数重写:
select
so.SALESORDERCODE,
so.ITEMCODE,
sum(case when i.WAREHOUSECODE = 'Main' then i.UNITSINSTOCK end) UnitsInMain,
sum(case when i.WAREHOUSECODE = 'PFC' then i.UNITSINSTOCK end) UnitsInPFC
from SalesOrder so
left join Inventory i
on so.ItemCode = i.ItemCode
group by so.SALESORDERCODE,
so.ITEMCODE;
答案 1 :(得分:1)
不确定它是否可以在没有SQL小提琴的情况下工作,但这是我的第一个想法:
select sot.SALESORDERCODE,sot.ITEMCODE, sum(main.UNITSINSTOCK), sum(pfc.UNITSINSTOCK)
from sales_order_table sot
left join inventory_table main on sot.ITEMCODE=main.ITEMCODE and main.WAREHOUSECODE='MAIN'
left join inventory_table pfc on sot.ITEMCODE=pfc.ITEMCODE and pfc.WAREHOUSECODE='PFC'
group by sot.SALESORDERCODE,sot.ITEMCODE
如果同一产品在库存表中两次为main或pfc它总和。其他仓库代码怎么样?我们需要一个支点吗?
答案 2 :(得分:0)
如果仅限于这两个,您可以使用案例陈述: SQL Fiddle
select
SO.SalesOrderCode
,I.ITEMCODE
,sum(case when I.WAREHOUSECODE = 'MAIN' then I.UNITSINSTOCK else 0 end) as MAIN
,sum(case when I.WAREHOUSECODE = 'PFC' then I.UNITSINSTOCK else 0 end)
from
SalesOrder SO
inner join Inventory I
ON SO.ITEMCODE = I.ITEMCODE
group by
SO.SalesOrderCode,
I.ITEMCODE
否则,根据您的RDBMS平台,您可以查看数据透视。