如何获取表格查询结果

问题描述 投票:0回答:1

需要像枢轴这样的查询帮助

先生,我有一张桌子,上面有一件物品(20件)的名称和数量(s=1 m=1 L=2 XL=4)(s尺寸的布料需要1m)

其他表中有客户需求数量(s=2000, m=2000, l=2000, xl=2000)

需要每件商品的总数量按照客户要求的数量

让我了解如何使用数据透视表查询来获取表格结果

如何获取尺寸明智的商品总数

尽快感谢您的帮助

关注

oracle pivot
1个回答
0
投票

如果没有样本数据和预期结果,还不太清楚,但这里有两个选项可以做到这一点,它们都具有“旋转”每个项目和客户所需的订购项目数量和 FABRIC_QUANTITIES 数量。希望对您有帮助:

WITH      --  S a m p l e    D a t a :
    items AS
        ( Select  1 "ITEM_ID", 'Name 1 S' "ITEM_NAME", 'S' "ITEM_SIZE" From Dual Union All
          Select  2, 'Name 1 M',   'M' From Dual Union All
          Select  3, 'Name 1 L',   'L' From Dual Union All
          Select  4, 'Name 1 XL', 'XL' From Dual Union All
          Select  5, 'Name 2 S',   'S' From Dual Union All
          Select  6, 'Name 2 M',   'M' From Dual Union All
          Select  7, 'Name 2 L',   'L' From Dual Union All
          Select  8, 'Name 2 XL', 'XL' From Dual Union All
          Select  9, 'Name 3 S',   'S' From Dual Union All
          Select 10, 'Name 3 M',   'M' From Dual Union All
          Select 11, 'Name 3 L',   'L' From Dual Union All
          Select 12, 'Name 3 XL', 'XL' From Dual 
        ), 
    orders AS
        ( Select 1001 "ORDER_ID",  5 "ITEM_ID", 2000 "QUANTITY", 11 "CUSTOMER_ID" From Dual Union All 
          Select 1001,  2, 2000, 12 From Dual Union All 
          Select 1001, 11, 2000, 11 From Dual Union All 
          Select 1001,  8, 2000, 14 From Dual 
        )
-- Option 1.  -  Case expressions used for pivoting
Select    i.ITEM_ID, i.ITEM_NAME, 
          o.CUSTOMER_ID,
          Case When i.ITEM_SIZE = 'S' Then o.QUANTITY End "SIZE_S_ITEMS",
          Case When i.ITEM_SIZE = 'S' Then o.QUANTITY * 1 End "SIZE_S_FABRIC_QNT",
          Case When i.ITEM_SIZE = 'M' Then o.QUANTITY End "SIZE_M_ITEMS",           
          Case When i.ITEM_SIZE = 'M' Then o.QUANTITY * 1 End "SIZE_M_FABRIC_QNT", 
          Case When i.ITEM_SIZE = 'L' Then o.QUANTITY End "SIZE_L_ITEMS",
          Case When i.ITEM_SIZE = 'L' Then o.QUANTITY * 2 End "SIZE_L_FABRIC_QNT", 
          Case When i.ITEM_SIZE = 'XL' Then o.QUANTITY End "SIZE_XL_ITEMS",
          Case When i.ITEM_SIZE = 'XL' Then o.QUANTITY * 4 End "SIZE_XL_FABRIC_QNT"
From          items i
Left Join orders o ON(o.ITEM_ID = i.ITEM_ID)
Order By  i.ITEM_ID
-- Option 2.  -  PIVOT clause
SELECT    *
FROM    ( Select      i.ITEM_ID, i.ITEM_NAME, 
                    o.CUSTOMER_ID,
                    i.ITEM_SIZE, 
                    o.QUANTITY
          From        items i
          Left Join orders o ON(o.ITEM_ID = i.ITEM_ID)
          Order By  i.ITEM_ID
        )
  PIVOT ( Sum(QUANTITY) as "ITEMS", Sum(QUANTITY * Case  When ITEM_SIZE = 'S' Then 1
                                                         When ITEM_SIZE = 'M' Then 1
                                                         When ITEM_SIZE = 'L' Then 2
                                                         When ITEM_SIZE = 'XL' Then 4
                                                    End) as "FABRIC_QNT"
          FOR ITEM_SIZE IN ('S' as "SIZE_S", 'M' as "SIZE_M", 'L' as "SIZE_L", 'XL' as "SIZE_XL" )
        )
Order By ITEM_ID

以上两个选项的结果相同:

/*    R e s u l t :
   ITEM_ID ITEM_NAME CUSTOMER_ID SIZE_S_ITEMS SIZE_S_FABRIC_QNT SIZE_M_ITEMS SIZE_M_FABRIC_QNT SIZE_L_ITEMS SIZE_L_FABRIC_QNT SIZE_XL_ITEMS SIZE_XL_FABRIC_QNT
---------- --------- ----------- ------------ ----------------- ------------ ----------------- ------------ ----------------- ------------- ------------------
         1 Name 1 S                                                                                                                                           
         2 Name 1 M           12                                        2000              2000                                                                
         3 Name 1 L                                                                                                                                           
         4 Name 1 XL                                                                                                                                          
         5 Name 2 S           11         2000              2000                                                                                               
         6 Name 2 M                                                                                                                                           
         7 Name 2 L                                                                                                                                           
         8 Name 2 XL          14                                                                                                       2000               8000
         9 Name 3 S                                                                                                                                           
        10 Name 3 M                                                                                                                                           
        11 Name 3 L           11                                                                       2000              4000                                 
        12 Name 3 XL                                                                                                                                            */
© www.soinside.com 2019 - 2024. All rights reserved.