尝试选择上一年度所做更改的所有记录

时间:2017-07-27 16:58:09

标签: sql sql-server

我有一个课程表:c_inst,c_year,c_program_type,c_unique_key。我希望找到c_program_type从2016年到2017年从“V”变为“P”的位置,反之亦然。我遇到了运行问题。这是我尝试过的,我知道这是错误的:

 select * from courses a 
 where c_program_type in ('P','V') 
 and c_year = '2017' 
 and c_program_type != (select c_program_type from courses b where   
                       a.c_unique_key = b.c_unique_key and c_year = '2016') 

为sql noob执行此操作的最简单方法是什么?我也尝试过使用sql server临时表,但那里没有运气。提前致谢!

1 个答案:

答案 0 :(得分:1)

你可以尝试

SELECT a.* 
FROM   courses a 
       LEFT JOIN courses b 
              ON a.c_unique_key = b.c_unique_key 
                 AND a.c_program_type = b.c_program_type 
                 AND b.c_year = '2016' 
WHERE  a.c_program_type IN ( 'P', 'V' ) 
       AND a.c_year = '2017' 
       AND b.c_unique_key IS NULL