繁体   English   中英

Oracle-将列转换为行并获取总和

[英]Oracle - Converting a column to rows and getting a sum

我正在尝试将列转换为行并获得订单项的总和。 下面是数据库中当前数据的方式。 注意DollarDays商店如何指示并非所有商店都已订购所有商品。

Store         ItemNumber    Description    Ordered
----          ----------    ----------     ---------
WallyMart     10021         Corn           10         
J-Mart        10021         Corn           4
Big-H Foods   10021         Corn           32
WallyMart     20055         Beans          11         
J-Mart        20055         Beans          3
Big-H Foods   20055         Beans          21
DollarDays    50277         Onions         48

这是我的目标。 看起来差不多是按ItemNumber分组的

ItemNumber    Description    WallyMart    J-Mart    Big-H Foods  DollarDays  TotalOrdered
----------    -----------    ---------    ------    -----------  ----------  ------------
10021         Corn           10           4         32           0            46
20055         Beans          11           3         21           0            35
50277         Onions         0            0         0            48           48

当我尝试PIVOT时,这是我得到的简短示例。 我完全迷路了。

ItemNumber    Description    WallyMart    J-Mart    Big-H Foods  DollarDays  
----------    -----------    ---------    ------    -----------  ----------
10021         Corn           10           Null      Null         Null
10021         Corn           Null         4         Null         Null
10021         Corn           Null         Null      32           Null
10021         Corn           Null         Null      Null         0

仅供参考,我当然是初学者和学生,所以请原谅我我的发布不正确。 任何帮助表示赞赏。

尝试这个:

select 
itemnumber, description, 
coalesce("WallyMart",0) as "WallyMart",
coalesce("J-Mart",0) as "J-Mart",
coalesce("Big-H Foods",0) as "Big-H Foods",
coalesce("DollarDays",0) as "DollarDays",
coalesce("WallyMart",0) + coalesce("J-Mart",0) + coalesce("Big-H Foods",0) +     coalesce("DollarDays",0) as "Total"
from
(select * from stores) s
pivot
(max(ordered)
 for store in 
 ('WallyMart' as "WallyMart",
  'J-Mart' as "J-Mart",
  'Big-H Foods' as "Big-H Foods",
  'DollarDays' as "DollarDays")) p

为了说明一点, PIVOT子句由两部分组成-聚合和用于该聚合的值列表。 对于您的情况,使用的汇总是MAX ,因为看起来一个商店只能为一个特定产品创建一条记录。 如果不是这样,那么SUM将是正确的功能。 同样,由于我们需要按商店而不是按产品的详细信息,因此我们在列表中指定store列的不同值。

COALESCE用于在默认空值ordered列到0。最后,我们添加得到的总价值(合并为0后)的4个派生列。

SQLFiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM