在SQL Server中有一個表,資料是逐日輸入的。在這個表中,有些日子里沒有填寫資料。
因此,表中沒有記錄。
示例:DataTable
我需要從這個表中生成一個類似下面的報告。
創建一個包含一年中所有日子的表格。我知道我可以通過 "連接""dataTable "表來輸出一份報告。
但這個解決方案對我來說似乎有點奇怪。
是否有其他方法?
是否有其他方法?
我用于臨時日期表的代碼
CREATE TABLE tempDate (
calendarDate date,
PRIMARY KEY (calendarDate)
)
DECLARE[/span
@start DATE= '2021-01-01'。
@dateCount INT= 730,
@rowNumber INT=1.
WHILE (@rowNumber </span> @dateCount)
BEGIN
INSERT INTO tempDate values (DATEADD(DAY, @rowNumber, @start)
set @rowNumber=@rowNumber 1
END
去
select * from tempDate
這就是我使用這個表進行連接的方法
SELECT
*
from
tempDate td WITH (NOLOCK)
LEFT JOIN dataTable dt WITH (NOLOCK) ON dt.reportDate= td.calendarDate
WHERE = td.calendarDate
td.calendarDate BETWEEN '2021-09-05' AND '2021-09-15'
uj5u.com熱心網友回復:
創建一個包含一年中所有日子的表格。我知道我可以通過 "連接""dataTable "表來輸出一份報告。
這就是方法。 如果你真的想的話,你可以即時生成該 "表",但通常最好的方法是簡單地擁有一個日歷表。
uj5u.com熱心網友回復:
你可以使用常見的運算式表格來處理日期。你需要的代碼:
IF(OBJECT_ID('tempdb. #t') IS NOT NULL)
BEGIN BEGIN
DROP TABLE #t
結束
CREATE TABLE #t
(
id int,
dt date,
dsc varchar(100)。
)
INSERT INTO #t
VALUES[/span
(1, '2021.09.08', 'a/span>)。
(1, '2021.09.09', 'b') 。
(1, '2021.09.12', 'c')
DECLARE @minDate AS DATE
SET @minDate = (SELECT MIN(dt) FROM #t)
DECLARE @maxDate AS DATE
SET @maxDate = (SELECT MAX(dt) FROM #t)
WITH cte
AS
(
SELECT @minDate AS [ dt]
UNION ALL
SELECT DATEADD(DAY, 1, [dt] )
FROM cte
WHERE DATEADD(DAY, 1, [dt])<=@maxDate>)
)
SELECT
ISNULL(CAST(t.id AS VARCHAR(10)), ''/span>) AS【id】。
cte.dt AS [dt],
ISNULL(t.dsc, 'No record has been entered in the table.) AS [dsc] 。
FROM[/span]。
實驗
LEFT JOIN #t t on t.dt=cte.dt
uj5u.com熱心網友回復:
最快的方法是使用一個數字表,你可以在2個日期之間得到一個日期串列。
DECLARE @Date1 DATE, @Date2 DATE.
SET @Date1 = '20200528'
SET @Date2 = '20200625'
SELECT DATEADD(DAY,number 1, @Date1) [Date]
FROM master.spt_values
WHERE type = 'P'
AND DATEADD(DAY,number 1, @Date1) < @Date2.
因此,如果你去LEFT JOIN這個選擇,白你的表,你有你想要的結果。
SELECT *
FROM ( SELECT DATEADD(DAY, number 1, @Date1) [Date]
FROM master...spt_values WITH (NOLOCK)
WHERE type = 'P'
AND DATEADD(DAY,number 1, @Date1) < @Date2 ) as a
LEFT JOIN yourTable dt WITH (NOLOCK)
ON a.date = dt.reportDate
WHERE td. [Date] BETWEEN '2021-09-05' AND '2021-09-15'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311099.html
標籤:


