Q
我想选择在SQL
-2
A
回答
0
您还没有一个明确的答案提供了足够的信息,但如果所有你想要做的是让在日期列中的所有日期:
SELECT StartDates AS Dates
FROM table_name
+0
我想迭代startdate到DaysCount列值 – Nadeem
1
你的问题是缺乏大量的清晰但我真的明白你想在这里。完成此操作的最佳方法是使用统计表。我保留一个作为我的系统中的一个视图。
create View [dbo].[cteTally] as
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
)
select N from cteTally
现在,我们需要一个表来开始持有我们的数据。这是你应该在未来发布的内容。然后,我们可以简单地利用我们的理货表的权力,瞧,问题很简单。
declare @SomeTable table
(
StartDate date
, DaysCount int
)
insert @SomeTable
select '2017-06-23', 1 union all
select '2017-06-26', 3 union all
select '2017-08-07', 1
select MyDate = dateadd(day, t.N - 1, st.StartDate)
from @SomeTable st
join cteTally t on t.N <= st.DaysCount
order by st.StartDate
, t.N
这将输出:
2017-06-23
2017-06-26
2017-06-27
2017-06-28
2017-08-07
- 编辑 - 我会强烈建议使用符合表像我张贴,因为它是在这么许多情况下非常有用。但有时候这是行不通的。没问题。这是一种你可以内联的方式。请注意,由于您似乎并不需要太多的数值,因此我在这里也做了相当短的统计表。
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E2
)
select MyDate = dateadd(day, t.N - 1, st.StartDate)
from @SomeTable st
join cteTally t on t.N <= st.DaysCount
order by st.StartDate
, t.N
0
首先建立一个日期表,你可以加入,然后再加入到表的东西,如:
[Date] BETWEEN [StartDate] AND DATEADD(day, [DaysCount], [StartDate])
1
这里是一个递归CTE的另一种方式,尽管肖恩·兰格答案肯定是首选的方法。
declare @table table (StartDate date, DaysCount int)
insert into @table
values
('20170623',1),
('20170626',3),
('20170807',1)
declare @max date = (select max(StartDate) from @table)
;with cte as(
select min(StartDate) as StartDate
from @table
union all
select dateadd(day,1,StartDate)
from cte
where StartDate < @max
)
select
c.StartDate
from
cte c
inner join
@table t on
c.StartDate < dateadd(day,t.DaysCount,t.StartDate)
and c.StartDate >= t.StartDate
option (maxrecursion 0)
0
考虑到你是好与SQL游标
---Creating records
with cte as(Select Cast('01-01-2000' as Date) as startDate,1 as countD
union all
Select Cast('02-01-2000' as Date) as startDate,3 as countD
union all
Select Cast('10-01-2000' as Date) as startDate,1 as countD)
Select * into #Temp from cte;
--Creating temp table to hold results
create table #Result(
startDate Date,
)
--Using cursor to insert records
DECLARE @startDate Date,
@count int;
DECLARE db_cursor CURSOR FOR
SELECT startDate , countD
FROM #Temp
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @startDate , @count
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE @count> 0
BEGIN
set @count = @count-1;
set @startDate = DATEADD(DAY, @count, cast (@startDate as date));
INSERT INTO #Result
Select @startDate;
END
FETCH NEXT FROM db_cursor INTO @startDate , @count
END
CLOSE db_cursor
DEALLOCATE db_cursor
Select * from #Result
相关问题
- 1. SQL嵌套选择....我想?
- 2. SQL想问选择条款
- 3. 我想选择哪里在选择,我做错了什么?
- 4. 我想在SQL
- 5. 我想查询中选择在表1
- 6. SQL在选择中选择
- 7. 我想在SQL Server
- 8. 我想在我的sql查询中只选择年份部分的时间戳
- 9. SQL - 我想选择每周销量前5名的销售额
- 10. 我想从SQL Server表中选择特定值
- 11. 在SQL选择
- 12. 选择在SQL
- 13. 选择在SQL
- 14. 选择选择SQL
- 15. 我想选择下拉元素
- 16. 我想选择包含使用PHP
- 17. 我想选择一个节点
- 18. * [id^=选择所有,我想选择每个相同的号码
- 19. 我想隐藏那些选择空值的选择框
- 20. 我要选择客户,以及在SQL
- 21. 我如何分组,并选择在SQL
- 22. 我如何在fosuserbundle中选择我想要的字段?
- 23. 我想保存所有我选择的复选框值
- 24. 选择在SQL Server
- 25. SQL Server 2005我想能够选择一个我声明为变量的函数
- 26. 我想输出在SQL
- 27. SQL在选择中做出选择
- 28. 我想将所选值推入选择/选项下拉菜单
- 29. SQL - 选择内选择
- 30. 在sql中选择语句在sql中选择语句
是提供足够的信息。另外,你没有提出具体的问题。 – JohnH