1

我在一个表中有一组条目,表与另一个表连接在一起,我需要返回一个结果集,不包括特定日期值的条目。

表格1

查找表

我需要根据查询返回一组条目并找到值,以及根据屏幕截图的日期为 <= GETDATE() 的其他项的集合

结果应该是

结果

如您所见,结果集返回所有三个 General Worker 项,但应仅返回日期时间 <= GetDate() 的位置。

我尝试了各种方法,从 (SELECT .. (PARTITION)) 方法到子值表结果,它们都没有返回我需要的结果集。

我需要所有其他行都完好无损,只有普通工人 date <= GETDATE() 并且我被卡住了。

更新

修改前我的 T-SQL 语句:

SELECT
    T0.nContractID,
    T1.sJobCatNo,
    T1.nJobCatID,
    T1.sJobCatDesc,
    T1.nDeleted,
    T1.nAdminLocked,
    T1.nClientDefault,
    T1.nRateNT,
    CASE
        WHEN (T0.sDistributionCode IN ('Nails', 'Board'))
        THEN 1
        ELSE 0
    END AS 'ShowRate'
FROM
    [dbo].[Contract] AS T0
    INNER JOIN [dbo].[JobCategoryRates] AS T1 ON T1.nContractID = T0.nContractID
WHERE
    T1.nContractID = 200198
    AND T1.nDeleted = 0
ORDER BY
    T1.sJobCatDesc

更新 2

我需要结果看起来像这样:

在此处输入图像描述

更新 3

也许这可能会有所帮助?

表 1,对于 nContractID 返回 19 个结果(其中 3 个相同),唯一不同的值是 dEndDate 列应该是 <= GETDATE()。我需要提取 dEndDate 为空且 dEndDate <= GETDATE() 的所有值。到目前为止我尝试过的所有事情都只返回一个结果,但我脑海中的逻辑说我应该有 17 个结果,如果 dEndDate 项目 >= GETDATE() 被删除?

4

1 回答 1

2

需要清理查询和您的思考过程

如果要调试 dEndDate 则将其包含在输出中

dEndDate 为空且 dEndDate <= GETDATE() 始终为假的所有值。
值不能为 null 且具有值。

在默认配置中,与 null 的比较始终为 false。
null <= 1/1/2000 为假
null >= 1/1/2000 为假
null = null 为假

如果你想要 null OR dEndDate <= GETDATE() 那么:

where dEndDate is null or dEndDate <= GETDATE()

为什么你会期望这不会返回一行?

dEndDate <= GETDATE() 
于 2013-07-23T18:19:33.543 回答