SQL查询将每行复制12次

时间:2018-01-03 16:46:52

标签: sql postgresql

我有一个包含网站,年份和销售额的表格。此表在网站上是唯一的+年,例如

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的数据源)

如果有人能够提供解决方案,那将非常有帮助,因为我是这方面的新手

2 个答案:

答案 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

在线示例:http://rextester.com/GUWPI39685

答案 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