這是我的起始表,它按 ID 提供銷售資訊。
ID | 店名 | 市場 | 銷售量 | 主要產品 |
---|---|---|---|---|
1個 | 商店A | 羅馬 | 10 | 一個 |
2個 | B店 | 羅馬 | 15 | b |
3個 | 商店C | 羅馬 | 9 | C |
4個 | Mag1 | 巴黎 | 10 | 一個 |
5個 | Mag2 | 巴黎 | 23 | b |
6個 | Mag3 | 巴黎 | 12 | C |
7 | 店鋪1 | 倫敦 | 11 | 一個 |
8個 | 店鋪2 | 倫敦 | 31 | b |
9 | 店鋪3 | 倫敦 | 45 | C |
10 | 店鋪4 | 倫敦 | 63 | d |
為了構建報告并創建一些動態句子,我需要按照下表對資料集進行“分頁”:
ID | 方面 | 尺寸_名稱 | 銷售量 | 主要產品 |
---|---|---|---|---|
1個 | 購物中心 | 商店A | 10 | 一個 |
1個 | 市場 | 羅馬 | 34 | 一個 |
2個 | 購物中心 | B店 | 15 | b |
2個 | 市場 | 羅馬 | 34 | b |
3個 | 購物中心 | 商店C | 9 | C |
3個 | 市場 | 羅馬 | 34 | C |
關于如何從第一個表開始構建最后一個表,您有什么建議嗎?
總結一下:
- 新表將始終按 Id
- 市場銷售的匯總發生在每個購物中心所在的行級別
這是我到目前為止構建的查詢,但想知道是否有更好、更有效的方法來完成相同的查詢:
with store_temp_table as (
select
id
,Store_Name
,Market
, Main_Product
, sum(Sales) as Sales
from Production_Table
where 1=1
group by
1,2,3,4
)
, market_temp_table as (
select
market
, sum(Sales) as Sales
from Production_Table
where 1=1
group by
1
)
, store_temp_table_refined as(
Select
a.id
,a.Main_Product
, 'ShoppingCentre' as Dimension_Name
,SUM(a.Sales) as Sales
FROM store_temp_table a INNER JOIN
market_temp_table b on a.market = b.market
group by
1,2,3
)
, market_temp_table_refined as (
Select
a.id
,a.Main_Product
, 'Market' as DimensionName
,SUM(b.Sales) as Sales
FROM store_temp_table a INNER JOIN
market_temp_table b on a.market = b.market
group by
1,2,3
)
select * from store_temp_table_refined
union all
select * from market_temp_table_refined
謝謝
uj5u.com熱心網友回復:
使用回傳所需維度的 CTE,并將其交叉連接到回傳表列和包含每個市場總銷售額的附加列的查詢:
WITH Dimensions(id, Dimension) AS (VALUES
ROW(1, 'ShoppingCentre'),
ROW(2, 'Market')
)
SELECT p.Id,
d.Dimension,
CASE d.id WHEN 1 THEN p.Store_Name ELSE p.Market END Dimension_Name,
CASE d.id WHEN 1 THEN p.Sales ELSE p.MarketSales END Sales,
p.Main_Product
FROM Dimensions d
CROSS JOIN (SELECT *, SUM(Sales) OVER (PARTITION BY Market) AS MarketSales FROM Production_Table) p
ORDER BY p.id, d.id;
或者,使用 UNION ALL:
SELECT Id,
'ShoppingCentre' Dimension,
Store_Name Dimension_Name,
Sales,
Main_Product
FROM Production_Table
UNION ALL
SELECT Id,
'Market',
Market,
SUM(Sales) OVER (PARTITION BY Market),
Main_Product
FROM Production_Table
ORDER BY Id,
CASE Dimension WHEN 'ShoppingCentre' THEN 1 WHEN 'Market' THEN 2 END;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/535895.html
標籤:数据库