2013-07-23 77 views
1

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

表1

lookup table

我需要返回基于查询的条目的收集和发现价值,与其他项目的集合,沿着其中的日期应为每截图是< = GETDATE ()

结果应该是

results

正如你所看到的,结果集返回所有三个普通工作者项目,但应该只返回日期时间为< = GetDate()。

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

我需要所有其他行,只有普通工人,其中日期< = GETDATE(),我卡住了。

UPDATE

我的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

UPDATE 3

也许这可能有帮助吗?

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

+0

您是否尝试添加AND T1。[Date] <= GETDATE()到您的WHERE子句中? –

+0

@SteveFord是的,它返回一个结果,其他列消失。 – JadedEric

+1

如果您需要查看带有空值的行,那么您可以尝试AND(T1。[Date] <= GetDate()OR T1。[Date] IS NULL) –

回答

2

需要清理的查询和你的思维过程

如果你想调试dEndDate然后将其包含在输出

所有值,其中dEndDate为null,并且dEndDate < = GETDATE()始终是假的。
值不能为空并且有值。

在默认配置中,与null的比较始终为false。
空< = 1/1/2000是假
空> = 1/1/2000是假
如果你想null或dEndDate < = GETDATE(),则空= null是假

where dEndDate is null or dEndDate <= GETDATE() 

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

dEndDate <= GETDATE()