SQL:所有可能组合的percantage更改

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

我开始学习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

[如果有人可以提供帮助或提供有关问题根源的线索,那太好了。

sql lag cube
1个回答
0
投票

根据您的描述,查询应该是:

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,因为我想明确说明所产生的结果。)

© www.soinside.com 2019 - 2024. All rights reserved.