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