我有一个包含网站,年份和销售额的表格。此表在网站上是唯一的+年,例如
site year sales
-------------------
a 2012 50
b 2013 100
a 2006 35
现在我要做的是让这个表在网站+年+月独一无二。因此,每行重复12次,添加一个月的列,标记为1-12,销售值除以12,因此
site year month sales
-------------------------
a 2012 1 50/12
a 2012 2 50/12
...
a 2012 12 50/12
...
b 2013 1 100/12
...
a 2006 12 35/12
我目前正在python上做这个,它就像一个魅力,但我需要在SQL中做这个(理想情况下是PostgreSQL,因为我将它用作tableau的数据源)
如果有人能够提供解决方案,那将非常有帮助,因为我是这方面的新手
答案 0 :(得分:1)
您可以generate_series()
使用
select t.site, t.year, g.month, t.sales / 12
from the_table t
cross join generate_series(1,12) as g (month)
order by t.site, t.year, g.month;
如果列sales
是整数,则应将其强制转换为numeric
以避免整数除法:t.sales::numeric / 12
答案 1 :(得分:0)
尝试这种方法(对于T-SQL - MS SQL):
DECLARE @T TABLE
(
[site] VARCHAR(5),
[year] INT,
sales INT
)
INSERT INTO @T
VALUES('A',2012,50),('B',2013,100),('C',2006,35)
;WITH CTE
AS
(
SELECT
MonthSeq = 1
UNION ALL
SELECT
MonthSeq = MonthSeq+1
FROM CTE
WHERE MonthSeq <12
)
SELECT
T.[site],
T.[year],
[Month] = CTE.MonthSeq,
sales = T.[sales]/12
FROM CTE
CROSS JOIN @T T
ORDER BY T.[site],CTe.MonthSeq