我开始学习SQL并拥有以下表格(它们包含更多数据,但只有那些似乎是问题的必要数据)。
ITEM:
item_keys deparment_desc
----------------------------
10001 Womens Clothing
10002 Womens Clothing
10003 Sporting Goods
销售:
cur_trn_date item_key store_key tot_sls_qty
----------------------------------------------
1999-12-01 10001 1 8346.17
1999-12-01 10001 2 235.40
.
.
.
2001-12-31 2001-12-31 10 1108.33
商店:
store_key type_key type_desc
--------------------------------
1 1 Super Malls
2 2 Strip Malls
3 3 Retail Only
.
.
.
10 1 Super Malls
((对不起,如果看起来不是真正的结构化,我无法在StackOverflow上找到创建表的方法)
我想得到的是每年的总销售额以及与去年相比的百分比变化。所有这些对于Department_desc和type_desc的所有可能组合。我尝试使用以下代码进行尝试,但CUBE和LAG函数似乎存在问题。它们是意外令牌。
SELECT YEAR(s.cur_trn_date) AS year, SUM(s.tot_sls_qty) AS sales,
(SUM(s.tot_sls_qty) - LAG(SUM(s.tot_sls_qty)) / SUM(s.tot_sls_qty)) AS difference
FROM sales s, item i, store st
GROUP BY YEAR(s.cur_trn_date)
CUBE(i.departmend_desc, st.type_desc)
WHERE s.item_key = i.item_key
AND s.store_key = st.store_key
[如果有人可以提供帮助或提供有关问题根源的线索,那太好了。
根据您的描述,查询应该是:
SELECT YEAR(s.cur_trn_date) AS year,
SUM(s.tot_sls_qty) AS sales,
(SUM(s.tot_sls_qty) - LAG(SUM(s.tot_sls_qty)) /
SUM(s.tot_sls_qty)
) AS difference
FROM sales s JOIN
item i
ON s.item_key = i.item_key JOIN
store st
ON s.store_key = st.store_key
GROUP BY GROUPING_SETS ( (YEAR(s.cur_trn_date)),
(YEAR(s.cur_trn_date), i.departmend_desc, st.type_desc),
(YEAR(s.cur_trn_date), i.departmend_desc),
(YEAR(s.cur_trn_date), st.type_desc)
);
我不确定是否具有可以实际运行的语法是否可以解决您的问题。 (与grouping sets
相比,我更喜欢cube
,因为我想明确说明所产生的结果。)