SQL查询将每行复制12次
我有一个表,其中列网站,年和销售。此表在现场+年份中是唯一的,例如SQL查询将每行复制12次,sql,postgresql,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
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的数据源
如果有人也能提供解决方案的解释,那将非常有帮助,因为我是这方面的新手您可以使用generate_series
如果列sales是整数,则应将其转换为数字以避免整数除法:t.sales::numeric/12
在线示例:尝试使用这种方法处理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
你试过什么吗?谢谢!非常简短和优雅的解决方案
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