--OldQuery
SELECT oldStartDate AS column,...
FROM Table
WHERE
oldStartDate > @date,...
GROUP BY
oldStartDate,...
在表中添加了一个新的列newStartDate
nullable,数据提取必须有条件地依赖于此列
--NewQuery
SELECT ISNULL(newStartDate, oldStartDate) AS column,...
FROM Table
WHERE
(
(newStartDate IS NULL AND oldStartDate > @date)
OR
(newStartDate > @date)
),...
GROUP BY
ISNULL(newStartDate, oldStartDate),...
以上是我可以想到的有条件检索的方法,但在我看来它会导致性能问题,我无法在DEV
环境中评估,因为数量不够大,但产量估计大约2mil记录。想知道是否有其他推荐的方法呢?
如果你打算在ISNULL
条款中使用GROUP BY
,你也可以在WHERE
条款中使用,因为两者都会使newStartDate
无法解决,because the column is nullable.(感谢链接,John Cappelletti!)
假设NewStartDate
将替换OldStartDate
,您可以做的一件事是将newStartDate
中的所有空值更新为oldStartDate
的非空值,然后将您的newStartDate
列更改为不可为空的列:
UPDATE TableName
SET NewStartDate = OldStartDate
WHERE NewStartDate IS NULL;
GO
ALTER TABLE TableName
ALTER COLUMN NewStartDate date NOT NULL;
GO
然后您的查询可以更简单和更可靠:
SELECT NewStartDate AS column,...
FROM Table
WHERE
NewStartDate > @date,...
GROUP BY
NewStartDate ,...