gpt4 book ai didi

sql-server-2008 - SQL如何从单行创建多行

转载 作者:行者123 更新时间:2023-12-01 09:34:45 25 4
gpt4 key购买 nike

您好,我是 SQL Server 2008 的新手

我想根据另一个列将单行扩展到多行,

例如

date          value
7-2011 5

结果:

2011-07-01     
2011-08-01
2011-09-01
2011-10-01
2012-11-01

日期应该是当前和下个月的第一天重复5次

最佳答案

尝试:

DECLARE @YourTable table (YourDate datetime, value int)

insert into @YourTable VALUES ('2011-7-12',5)

;WITH AllNumbers AS
(
SELECT 0 AS Number
UNION ALL
SELECT Number+1
FROM AllNumbers
WHERE Number<4
)
SELECT
dateadd(month,number,DATEADD(month,DATEDIFF(month,0,YourDate),0))
FROM @YourTable y
INNER JOIN AllNumbers a ON 1=1

输出:

-----------------------
2011-07-01 00:00:00.000
2011-08-01 00:00:00.000
2011-09-01 00:00:00.000
2011-10-01 00:00:00.000
2011-11-01 00:00:00.000

(5 row(s) affected)

它适用于表格中的多行,请参见此处:

DECLARE @YourTable table (YourDate datetime, ValueOf int)

insert into @YourTable VALUES ('2011-7-12',5)
insert into @YourTable VALUES ('2012-4-24',6)

;WITH AllNumbers AS
(
SELECT 0 AS Number
UNION ALL
SELECT Number+1
FROM AllNumbers
WHERE Number<4
)
SELECT
y.ValueOf
,dateadd(month,number,DATEADD(month,DATEDIFF(month,0,y.YourDate),0))
FROM @YourTable y
INNER JOIN AllNumbers a ON 1=1
ORDER BY 1,2

输出:

ValueOf     
----------- -----------------------
5 2011-07-01 00:00:00.000
5 2011-08-01 00:00:00.000
5 2011-09-01 00:00:00.000
5 2011-10-01 00:00:00.000
5 2011-11-01 00:00:00.000
6 2012-04-01 00:00:00.000
6 2012-05-01 00:00:00.000
6 2012-06-01 00:00:00.000
6 2012-07-01 00:00:00.000
6 2012-08-01 00:00:00.000

(10 row(s) affected)

另外,我没有可用的 SQL Server 2008,所以我使用了 datetime,如果你有 2008,你可以使用 DATE 数据类型并且你不必设置 datetime,所以使用这一行:

dateadd(month,number,y.YourDate)

关于sql-server-2008 - SQL如何从单行创建多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com