2016-03-17 43 views
0

我需要编写一个基于选择截断的查询并输出另一个表。选择标准如下:对于每个公共ID循环,通过AGREE列找到一个Y,如果没有Y则输出0,如果单个Y那么输出那一年,如果多个Y则输出最新的年份。用于查找唯一值的SQL查询

输入表:

ID AGREE YEAR 
1 N 2003 

2 Y 2005 
2 N 2015 

3 N 2005  
3 N 2007 
3 Y 2011 
3 Y 1999 

4 N 2005 
4 N 2010 

输出表:

ID AGREE YEAR 

1 N 0 
2 Y 2005 
3 Y 2011 
4 N 0 
+0

你试过了什么? – philshem

回答

2

这里是我的解决方案:

Select id, max(agree), max(case when agree = 'Y' then year else 0 end) 
from [input table] 
group by id 

它依赖于由id字段分组,并使用最大语句返回如果该组为“Y”,则在同意为“Y”时返回年份最大的数字。请注意,你说“最近的” - 如果这张表包含未来的年份,它将不会返回最近的,而是最远的未来。

注意:还有一种替代方法可以更快速地执行子查询。如果遇到性能问题,那么值得追求。

+0

感谢您的编辑! :) – TPhe

+0

谢谢TPhe。但是,我忘了添加表中的其他列。我将如何调整您的查询,以便根据上述选择添加其他列值。其他列不需要查询。 –

+0

这取决于情况,但很简单,只需将该字段添加到Select子句和group by子句即可。任何位于select子句中但未在聚合函数中使用的字段(如max())都必须位于group by子句中。 – TPhe