需要像枢轴这样的查询帮助
先生,我有一张桌子,上面有一件物品(20件)的名称和数量(s=1 m=1 L=2 XL=4)(s尺寸的布料需要1m)
其他表中有客户需求数量(s=2000, m=2000, l=2000, xl=2000)
需要每件商品的总数量按照客户要求的数量
让我了解如何使用数据透视表查询来获取表格结果
如何获取尺寸明智的商品总数
尽快感谢您的帮助
关注
如果没有样本数据和预期结果,还不太清楚,但这里有两个选项可以做到这一点,它们都具有“旋转”每个项目和客户所需的订购项目数量和 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 */