2017-07-26 32 views
2

比方說,我有這樣的:需要創建一個SQL腳本來得到這樣的結果

+-----+------+ 
| ID | Var | 
+-----+------+ 
| 100 | 2 | 
| 100 | 4 | 
| 100 | NULL | 
+-----+------+ 
| 425 | 1 | 
| 425 | 2 | 
| 425 | 3 | 
| 425 | 7 | 
+-----+------+ 
| 467 | NULL | 
| 467 | NULL | 
+-----+------+ 
| 500 | 3 | 
| 500 | NULL | 
| 500 | NULL | 
+-----+------+ 

如果這些ID的甚至一個具有與其相關聯的空VAR,我需要從刪除值的所有ID腳本輸出。所以,我會以此結束。

+-----+------+ 
| ID | Var | 
+-----+------+ 
| 425 | 1 | 
| 425 | 2 | 
| 425 | 3 | 
| 425 | 7 | 
+-----+------+ 

但是,我只想要其中的一個變量(最大)。哦,這些變量是日期,儘管我把它們放在簡單的數字中以便於閱讀。他們將這種格式:

YYYY-MM-DD HH:MM:SS

到底......我想這樣的輸出:

+-----+------+ 
| ID | Var | 
+-----+------+ 
| 425 | 7 | 
+-----+------+ 

我想象我可能需要一個CASE語句才能做到這一點。 此外,我不知道這是否有幫助,但在我的輸出中還有其他幾個列,但我只需要測試以查看此變量是否具有NULL值。

(該DateDroppedOff是VAR)

我現在的腳本(略簡化爲只有相關的信息):

SELECT TOP 100000 [t1].[ID] 
     ,[t1].[DateCreated] 
     ,[t3].[DateDroppedOff]  
     ,[t3].[HasBeenDroppedOff] 
     ,[t3].[ManifestItemID] 
     ,[t3].[ManifestID] 
FROM [t1] 
LEFT JOIN t2 ON t1.ID = t2.ID 
LEFT JOIN t3 ON t2.MovementID = t3.MovementsID 
ORDER BY t1.ID 

謝謝你!

回答

3

一般來說,你可以做這樣的

select id, max(var) 
from your_table 
group by id 
having sum(case when var is null then 1 else 0 end) = 0 
+0

非常感謝。它工作得很好。 –

0

另一種方式來做到這一點:

SELECT ID, MAX(VAR) as VAR 
FROM table A 
WHERE NOT EXISTS (SELECT 1 FROM table B WHERE A.ID = B.ID and B.VAR IS NULL) 
GROUP BY ID 
相關問題