我需要编写一个基于选择截断的查询并输出另一个表。选择标准如下:对于每个公共ID循环,通过AGREE列找到Y,如果没有Y则输出0,如果单个Y则输出那一年,如果多个Y则输出当前最年份。
输入表:
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 :(得分:2)
这是我的解决方案:
Select id, max(agree), max(case when agree = 'Y' then year else 0 end)
from [input table]
group by id
它依赖于id字段的分组,并且如果它存在于组中,则使用max语句返回“Y”,然后当同意为“Y”时返回年份的最大数字。请注意,您说“最近” - 如果此表包含将来的年份,则不会返回最新的,而是返回到最近的未来。
注意:执行此操作的另一种方法通常更快,涉及使用子查询。如果遇到性能问题,那就值得追求。