2012-03-18 94 views
0

我有一个表的数据:SQL服务器 - 选择特定的行

id a_no accountname 
1 NULL ac1 
1 234 ac2 
1 567 ac3 
2 NULL ac4 

我想用以下标准来选择行:

  1. 如果同一ID在超过1行存在,那么与a_no=NULL
  2. 删除行,如果在第1行中存在ID只,保留该行不变

所以生成的行应该是

id a_no accountname 
1 234 ac2 
1 567 ac3 
2 NULL ac4 

如何编写T-SQL查询?谢谢。

+2

如果2 NULL值相同的ID存在吗? – 2012-03-18 16:31:16

回答

1
select * from yourtable 
where a_no is not null 
union all 
select * from yourtable 
where id not in 
    (select id from your table where a_no is not null) 
+0

尽管Martijn和Mosty编写了更好的代码,Phil先正确回答。无论如何谢谢所有人! – newcoder 2012-03-18 17:13:29

0
DELETE FROM yourtable 
WHERE id IN (SELECT id FROM yourtable 
      WHERE NOT a_no IS NULL) 
AND a_no IS NULL 

编辑:简单多了 编辑II:误解你的问题,你只需要选择的行,而不是从表中删除。如果是这样,你可以使用以下命令:

SELECT * FROM yourtable 
WHERE a_no IS NOT NULL 
OR id NOT IN (SELECT id FROM yourtable 
       WHERE a_no IS NOT NULL) 
+0

newcoder想要选择,而不是删除 – Phil 2012-03-18 16:51:56

0

基于Martinjn查询我会去:

select * from t 
where id not in (
    select id from t 
    where a_no is not null) 
or a_no is not null