如果列满足条件,如何选择一行,如果没有,请选择另一行? [Access 2010]

时间:2015-11-30 19:02:19

标签: sql database ms-access

我使用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中,它并不想进行协作。

感谢您的帮助!

菲尔

1 个答案:

答案 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);