久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

While 循環創建重復記錄

While loop creating duplicate records(While 循環創建重復記錄)
本文介紹了While 循環創建重復記錄的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

我有一個非常簡單的查詢,它需要兩個日期(開始和結束日期,例如:01/01/2018-01/31/2018),然后取出開始和結束日期的周數(例如:1 和5).我使用 while 循環在一張表中輸入所有周數(例如:1、2、3、4、5).我的 while 循環正在創建重復記錄,例如所有值的多個記錄.我不確定是什么問題.有人可以建議我可能做錯了什么嗎?

I have a very simple query that takes two dates (start and end date, ex: 01/01/2018-01/31/2018) and then take out the week number of start and end date (ex: 1 and 5). I use while loop in order to enter all week numbers in one table (ex: 1,2,3,4,5). My while loop is creating duplicate records, like multiple records for all values. I am not sure what the issue is. Can someone suggest what I am might be doing wrong?

代碼:

DECLARE @StartDate datetime = '01/01/2018'
    ,@EndDate datetime = '01/31/2018'
DECLARE @StartDateWeek INT  = DATEPART(WK,@StartDate)
    ,@EndDateWeek INT   = DATEPART(WK,@EndDate)
SELECT @StartDateWeek,@EndDateWeek

DECLARE @DateRangeWeekList TABLE(
Date DATE
,WeekNumber INT)

INSERT INTO @DateRangeWeekList
SELECT  Date = @StartDate
        ,WeekNumber = @StartDateWeek
select * from @DateRangeWeekList


WHILE (SELECT MAX(WeekNumber) FROM @DateRangeWeekList) < (SELECT     @EndDateWeek)
BEGIN
INSERT INTO @DateRangeWeekList
SELECT  Date = null
        ,WeekNumber = WeekNumber +1
FROM @DateRangeWeekList
END

select * from @DateRangeWeekList

結果:

Date        WeekNumber
2018-01-01  1
NULL        2
NULL        2
NULL        3
NULL        2
NULL        3
NULL        3
NULL        4
NULL        2 and more (total 18 records)

預期結果

Date       WeekNumber
2018-01-01 1
NULL       2
NULL       3
NULL       4
NULL       5

推薦答案

遞歸 CTE 在這里比 WHILE 循環要好得多:

A recursive CTE would be far better here than a WHILE loop:

DECLARE @StartDate datetime = '01/01/2018',
        @EndDate datetime = '01/31/2018';

WITH WeekNumbers AS(
    SELECT CONVERT(date,@StartDate) AS [Date],
           1 AS WeekNumber
    UNION ALL
    SELECT NULL,
           WeekNumber + 1
    FROM WeekNumbers
    WHERE WeekNumber <= DATEDIFF(WEEK, @StartDate, @EndDate))
SELECT *
FROM WeekNumbers;

不過,您也可以考慮使用日歷表.有很多選擇供您選擇.

You could also, however, consider using a Calendar table. There are lots of options out there for you.

這篇關于While 循環創建重復記錄的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

What SQL Server Datatype Should I Use To Store A Byte[](我應該使用什么 SQL Server 數據類型來存儲字節 [])
Interpreting type codes in sys.objects in SQL Server(解釋 SQL Server 中 sys.objects 中的類型代碼)
Typeorm Does not return all data(Typeorm 不返回所有數據)
Typeorm .loadRelationCountAndMap returns zeros(Typeorm .loadRelationCountAndMap 返回零)
How to convert #39;2016-07-01 01:12:22 PM#39; to #39;2016-07-01 13:12:22#39; hour format?(如何將“2016-07-01 01:12:22 PM轉換為“2016-07-01 13:12:22小時格式?)
MS SQL: Should ISDATE() Return quot;1quot; when Cannot Cast as Date?(MS SQL:ISDATE() 是否應該返回“1?什么時候不能投射為日期?)
主站蜘蛛池模板: 欧美中文字幕在线观看 | www.日韩系列 | 日本三级在线 | 久久久婷婷 | 91久久精品国产免费一区 | 日本黄色大片免费 | 精品免费国产 | 中文字幕一区二区三区精彩视频 | 在线播放亚洲 | a级免费视频| 国产精品国产a级 | 久久爱综合 | 中文字幕一区二区三区在线观看 | 亚洲成人一区 | 日韩欧美国产精品一区二区 | 成人在线视频一区二区三区 | 午夜在线小视频 | 日本一区二区三区免费观看 | 国产一区二区三区在线看 | 国产精品久久久久久久久免费软件 | 国产视频1区2区 | 337p日本欧洲亚洲大胆 | 久久久久久久一区 | 久久久久久久一区二区 | 精品国产精品国产偷麻豆 | 欧美寡妇偷汉性猛交 | 中文字幕一区二区三 | 日日摸夜夜添夜夜添精品视频 | 成人在线观 | 欧美色视频免费 | 黄色毛片在线观看 | 国产精品久久久久久久免费观看 | 久久久人成影片一区二区三区 | 日韩欧美一级片 | 影音先锋中文字幕在线观看 | 国产精品中文在线 | 色婷婷久久综合 | 国产精品久久欧美久久一区 | 亚洲高清在线观看 | 黄色a级一级片 | 欧美激情 一区 |