我使用Access 2010.
我有一张没有主键的桌子,不要问我为什么。 它看起来像这样。
Code | Dept | Name | Status |
================================
AA | 01 | John | A |
AB | 00 | Bert | A |
AB | 01 | Yoan | A |
BB | 00 | Luke | A |
我想选择每个Code ONCE。如果代码在两个部门之下,我想只选择dept01中的信息。
所以,我想要这个结果:
Code | Dept | Name | Status |
================================
AA | 01 | John | A |
AB | 01 | Yoan | A |
BB | 00 | Luke | A |
我知道我可以在SQL服务器中使用Case,但在Access中,它并不想进行协作。
感谢您的帮助!
菲尔
答案 0 :(得分:2)
嗯。这可能有点棘手。如果代码最多只出现两次(如示例数据中所示),那么您可以执行以下操作:
select t.*
from t
where dept = '01'
union all
select t.*
from t
where dept <> '01' and
not exists (select 1 from t as t2 where t2.code = t.code);
这将返回&#34; 01&#34;加上代码不在&#34; 01&#34;。
的其他部门的所有行编辑:
如果每个代码有多个行(每个部门只有一个),那么这也有效:
select t.*
from t inner join
(select code, max(iif(dept = '01', 1 0)) as has01, min(dept) as mindept
from t
group by code
) as tt
on t.code = tt.code
where t.dept = '01' or (t2.has01 = 0 and t.dept = t2.mindept);