SQL 新手。我有一个大约 2000 万条记录的未索引表,每个任务有一行,每个作业需要一行,每个作业行包含任务和任务日期。我使用一个支点来完成这个工作。我有一些巨大的 tempdb 增长,这是有问题的。我需要帮助调整此查询。当我查看执行计划时,我看到大约 80% 是由于表扫描。我认为索引源表会有所帮助,但我不确定如何索引。
SELECT Job
,TSK_CD + 'F' AS TaskCode
,CAST(FORECAST_DATE AS SMALLDATETIME) AS TaskDate
FROM Task_Details AS FcstDateQuery
WHERE FORECAST_DATE IS NOT NULL
UNION
SELECT Job
,TSK_CD + 'A' AS TaskCode
,CAST(ACTUAL_DATE AS SMALLDATETIME) AS TaskDate
FROM Task_Details AS ActDateQuery
WHERE ACTUAL_DATE IS NOT NULL
) AS TaskDateQuery
PIVOT(MAX(TaskDate) FOR TaskCode IN (
[Code1F]
,[Code1A]
,[Code2F]
,[Code2A]
,[Code3F]
,[Code3A]
<... a bunch of other task codes>
)) AS Piv
Run Code Online (Sandbox Code Playgroud)
源表有列
Job
,TSK_CD
,FORECAST_DATE
,ACTUAL_DATE …Run Code Online (Sandbox Code Playgroud) 要计算符合条件列表的行中的项目数,并将结果放置在该行的errorcnt列中。实际数据有15个条件和一百列。我认为此示例应说明我的追求。
CREATE TABLE #MyList
(
Item1 NVARCHAR(100),
Item2 NVARCHAR(100),
date1 DATE,
Date2 date,
errorcnt int
)
INSERT INTO #MyList
(
Item1,
Item2,
Date1,
Date2
)
VALUES
('Dog','Puppy', '2020-01-01', '2030-01-01'),
('Cat', 'Kitten', '2020-02-02', '2020-03-03')
Run Code Online (Sandbox Code Playgroud)
要计数的样本条件:
When Item1 <> Dog, OR
when Item2 <> puppy, OR
when Date2>date1
Run Code Online (Sandbox Code Playgroud)
每个记录都应计算在内,因此在记录2中,
Item1 <> Dog = 1
Item2 <> puppy = 1
Date 2 > Date 1 = 1
Total 3 errors.
Run Code Online (Sandbox Code Playgroud)
第2行的输出为:
Cat, Kitten, 2020-02-02, 2020-03-03, 3
Run Code Online (Sandbox Code Playgroud)
新手,不知道如何做到最好。
我有一个包含几个日期字段的表。我需要获取一个派生字段,它是 3 个特定字段中最早的日期。我必须为 4 个不同的日期集执行此操作。