2013-03-26 133 views
0

我在sql server中有一個查詢,顯示我不想要的幾條記錄。這些字段的關係如下:不包括匹配條件的選擇查詢中的記錄

ClientID可以具有多個工作負載(WorkloadIDs),但不能相反(一對多)。 每個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 

我希望它不是隻顯示1記錄出的具有相同客戶端ID和相同的單元和相同DWLD可用記錄幾號的。我試圖自我加入表,使用having子句和not exists子句,但沒有得到正確的結果。

的感謝!

Data displayed from the query

Source Table

+0

而是一個字的問題,能你顯示樣本數據和期望的結果? – 2013-03-26 21:49:16

+0

http://i.stack.imgur.com/C3fiI.png – 2013-03-26 22:14:29

+0

理想的結果對我沒有意義。你想排除紅色的行?爲什麼我們保留WorkloadID 108和131,但拒絕130?源表中沒有包含在屏幕截圖中的行嗎?確定查詢以在電子表格的屏幕截圖中產生結果而不知道源數據是什麼樣子是非常困難的。您能否提供問題中的表格樣本數據和表格結果? – 2013-03-26 22:22:39

回答

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) 
0

如果列中的值DWLD由小時/分鐘不同,你希望他們通過天使用CAST(CAST(DWLD爲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 
相關問題