blob: 8e6cb50eb295a2f4949addbc7e008184af9e6f40 [file] [log] [blame]
WITH
ss AS (
SELECT
s_store_sk
, sum(ss_ext_sales_price) sales
, sum(ss_net_profit) profit
FROM
store_sales
, date_dim
, store
WHERE (ss_sold_date_sk = d_date_sk)
AND (d_date BETWEEN CAST('2000-08-23' AS DATE) AND (CAST('2000-08-23' AS DATE) + INTERVAL '30' DAY))
AND (ss_store_sk = s_store_sk)
GROUP BY s_store_sk
)
, sr AS (
SELECT
s_store_sk
, sum(sr_return_amt) returns
, sum(sr_net_loss) profit_loss
FROM
store_returns
, date_dim
, store
WHERE (sr_returned_date_sk = d_date_sk)
AND (d_date BETWEEN CAST('2000-08-23' AS DATE) AND (CAST('2000-08-23' AS DATE) + INTERVAL '30' DAY))
AND (sr_store_sk = s_store_sk)
GROUP BY s_store_sk
)
, cs AS (
SELECT
cs_call_center_sk
, sum(cs_ext_sales_price) sales
, sum(cs_net_profit) profit
FROM
catalog_sales
, date_dim
WHERE (cs_sold_date_sk = d_date_sk)
AND (d_date BETWEEN CAST('2000-08-23' AS DATE) AND (CAST('2000-08-23' AS DATE) + INTERVAL '30' DAY))
GROUP BY cs_call_center_sk
)
, cr AS (
SELECT
cr_call_center_sk
, sum(cr_return_amount) returns
, sum(cr_net_loss) profit_loss
FROM
catalog_returns
, date_dim
WHERE (cr_returned_date_sk = d_date_sk)
AND (d_date BETWEEN CAST('2000-08-23' AS DATE) AND (CAST('2000-08-23' AS DATE) + INTERVAL '30' DAY))
GROUP BY cr_call_center_sk
)
, ws AS (
SELECT
wp_web_page_sk
, sum(ws_ext_sales_price) sales
, sum(ws_net_profit) profit
FROM
web_sales
, date_dim
, web_page
WHERE (ws_sold_date_sk = d_date_sk)
AND (d_date BETWEEN CAST('2000-08-23' AS DATE) AND (CAST('2000-08-23' AS DATE) + INTERVAL '30' DAY))
AND (ws_web_page_sk = wp_web_page_sk)
GROUP BY wp_web_page_sk
)
, wr AS (
SELECT
wp_web_page_sk
, sum(wr_return_amt) returns
, sum(wr_net_loss) profit_loss
FROM
web_returns
, date_dim
, web_page
WHERE (wr_returned_date_sk = d_date_sk)
AND (d_date BETWEEN CAST('2000-08-23' AS DATE) AND (CAST('2000-08-23' AS DATE) + INTERVAL '30' DAY))
AND (wr_web_page_sk = wp_web_page_sk)
GROUP BY wp_web_page_sk
)
SELECT
channel
, id
, sum(sales) sales
, sum(returns) returns
, sum(profit) profit
FROM
(
SELECT
'store channel' channel
, ss.s_store_sk id
, sales
, COALESCE(returns, 0) returns
, (profit - COALESCE(profit_loss, 0)) profit
FROM
ss
LEFT JOIN sr ON (ss.s_store_sk = sr.s_store_sk)
UNION ALL SELECT
'catalog channel' channel
, cs_call_center_sk id
, sales
, returns
, (profit - profit_loss) profit
FROM
cs
, cr
UNION ALL SELECT
'web channel' channel
, ws.wp_web_page_sk id
, sales
, COALESCE(returns, 0) returns
, (profit - COALESCE(profit_loss, 0)) profit
FROM
ws
LEFT JOIN wr ON (ws.wp_web_page_sk = wr.wp_web_page_sk)
) x
GROUP BY ROLLUP (channel, id)
ORDER BY channel ASC, id ASC, sales ASC
LIMIT 100