需要创建一个SQL脚本才能获得此结果

时间:2017-07-26 16:09:29

标签: sql sql-server sql-scripts

假设我有这个:

+-----+------+
| 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与其关联的NULL 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

谢谢!!!

2 个答案:

答案 0 :(得分:3)

一般来说,你可以这样做

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

答案 1 :(得分: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