不包括符合条件的选择查询中的记录

时间:2013-03-26 21:41:02

标签: sql-server

我在sql server中有一个查询,显示了一些我不想要的记录。字段的关系如下:

ClientID可以有多个工作负载(WorkloadID),但不能反过来(一对多)。 每个WorkloadID都有一个分配给它的单元。 每个WorkloadID都分配了一个DWLD(日期)。 多个WorkloadID可以具有相同的ClientID,DWLD和Unit。

以下是查询:

select 
w.WorkloadID,
w.ClientID,
w.Unit,
w.DWLD

        from 
        Workload as w
        left JOIN Clients as cli
        ON w.ClientID = cli.ClientID

    where

        w.DWLD >= @start AND w.DWLD < @enddate
        and w.IsDeleted <> 1

我希望它不会显示几个具有相同ClientID和相同单位和相同DWLD的可用记录中的1条记录。我试过自己加入表,使用having子句而不是exists子句,但没有得到正确的结果。

谢谢!

Data displayed from the query

Source Table

2 个答案:

答案 0 :(得分:0)

尝试此查询。如果您没有从clients表中检索记录,则无需加入该记录。

select w.WorkloadID, w.ClientID, w.Unit, w.DWLD
from Workload as w
where w.DWLD BETWEEN @start AND  @enddate
and w.IsDeleted <> 1 
AND NOT EXISTS (SELECT * FROM Workload 
WEHRE ClientId = w.clientid 
and unit = w.unit and dwld = w.dwld 
and workloadid < w.workloadid 
and DWLD BETWEEN @start AND  @enddate 
AND IsDeleted <> 1)

答案 1 :(得分:0)

如果DWLD列中的值相差小时/分钟,并且您希望它们按天数分组,请使用强制转换(强制转换(DWLD as float)为int)

select 
max(w.WorkloadID) as WorkloadID,
w.ClientID,
w.Unit,
w.DWLD

        from 
        Workload as w
        left JOIN Clients as cli
        ON w.ClientID = cli.ClientID

    where

        w.DWLD >= @start AND w.DWLD < @enddate
        and w.IsDeleted <> 1

group by w.ClientID,
w.Unit,
w.DWLD