首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >作为单独列的多个Where子句

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

Stack Overflow用户
提问于 2014-06-13 20:51:50
回答 3查看 80关注 0票数 1

我有一张销售订单表,上面写着:

代码语言:javascript
运行
复制
SALESORDERCODE  ITEMCODE    WAREHOUSECODE
SO-605338      ITEM-003200      MAIN
SO-605338      ITEM-016328      PFC

我还有一张存货表,上面写着:

代码语言:javascript
运行
复制
WAREHOUSECODE   ITEMCODE    UNITSINSTOCK
MAIN            ITEM-003200     1
MAIN            ITEM-016328     2
PFC             ITEM-016328     3
PFC             ITEM-003200     4

有人能帮我完成一系列的连接吗?

代码语言:javascript
运行
复制
SALESORDERCODE  ITEMCODE    UNITS IN MAIN   UNITS IN PFC
SO-605338      ITEM-003200         1             3
SO-605338      ITEM-016328         2             4

我可以编写一个WHERE子句来输出MAIN或PFC,但是我需要并排列。

谢谢你的帮忙!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-13 21:05:02

如果仅限于这两种情况,则可以使用case语句:SQL Fiddle

代码语言:javascript
运行
复制
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平台,您可能可以查看旋转。

票数 0
EN

Stack Overflow用户

发布于 2014-06-13 21:07:51

您可以在INVENTORY表上使用两个联接来获得结果--在列中为每个WarehouseCode添加一个连接:

代码语言:javascript
运行
复制
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';

与Demo。您会注意到,当您离开INVENTORY表上的JOIN时,您将包括要返回的WarehouseCode的筛选器。

还不清楚是否需要每个仓库中的所有单元,如果需要,则可以使用带有CASE表达式的聚合函数重写:

代码语言:javascript
运行
复制
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;

请参阅与Demo

票数 2
EN

Stack Overflow用户

发布于 2014-06-13 21:06:44

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

代码语言:javascript
运行
复制
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,则其总和。其他仓库代码呢?我们这里需要支点吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24213660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档