排除列的多个结果集

时间:2013-07-23 15:31:06

标签: sql-server tsql

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

表1

lookup table

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

结果应该是

results

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

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

我需要所有其他行,只有General Worker,其中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

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

enter image description here

更新3

也许这可能会有所帮助?

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

1 个答案:

答案 0 :(得分:2)

需要清理查询和思考过程

如果要调试dEndDate,请将其包含在输出

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

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

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

where dEndDate is null or dEndDate <= GETDATE()

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

dEndDate <= GETDATE()