Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多个Where子句作为单独的列_Sql - Fatal编程技术网

Sql 多个Where子句作为单独的列

Sql 多个Where子句作为单独的列,sql,Sql,我有一个销售订单表,如下所示: 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

我有一个销售订单表,如下所示:

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    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,但我需要将列并排输出


谢谢你的帮助

如果仅限于这两种情况,您可以使用案例陈述:


否则,根据您的RDBMS平台,您可能可以研究数据透视。

不确定它是否在没有SQL FIDLE的情况下工作,但我的第一个想法是:

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

如果同一产品在主产品或pfc的库存表中出现两次,则其总和为。其他仓库代码呢?我们需要一个数据透视吗?

您可以在
库存
表上使用两个联接获得结果-一列中所需的每个
仓库代码都有一个联接:

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';
看。您会注意到,当您在
INVENTORY
表上离开JOIN时,您将包括要返回的
仓库代码的过滤器

还不清楚每个仓库中是否需要总共的单元,若需要,则可以使用带有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;

请参见

这是正确的,但从预期结果来看,他们似乎不希望聚合
单位库存
,这部分不清楚。使用聚合/大小写和单个连接也可以编写稍微不同的代码。003200在PFC中不应该有4个单元吗?