小编sho*_*ton的帖子

用于枢轴的索引

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)

sql t-sql sql-server

4
推荐指数
1
解决办法
2057
查看次数

有条件地连续计数项目

要计算符合条件列表的行中的项目数,并将结果放置在该行的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)

新手,不知道如何做到最好。

sql sql-server

1
推荐指数
1
解决办法
42
查看次数

SQL Server 从 3 列中选择最短日期

我有一个包含几个日期字段的表。我需要获取一个派生字段,它是 3 个特定字段中最早的日期。我必须为 4 个不同的日期集执行此操作。

sql t-sql sql-server

-1
推荐指数
1
解决办法
7818
查看次数

标签 统计

sql ×3

sql-server ×3

t-sql ×2