2017-07-26 50 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 
相关问题