0

我有下表数据

ID         Type Code     Opt    Line    Status

26985444    1   100        1       1    S0
26987422    1   25         1       1    S0
26987422    1   25         2       1    S1
26987422    1   25         2       2    S2
26987422    4   25         2       3    S0
26987422    2   30         1       1    S1
26987422    2   30         1       2    S2
26987422    2   30         1       3    S0
26987422    3   35         1       1    S0
26985333    1   75         1       1    S0
26985000    1   55         1       1    S0
26985000    1   65         1       1    S0

在上面我只需要选择以下记录

26985444    1   100 1   1   S0
26985333    1   75  1   1   S0

我怎样才能为此编写 SQL 查询。

谢谢

4

2 回答 2

0

我将您的问题解释为发现ID仅在数据中出现一次的 s 。

你可以通过聚合来做到这一点,寻找单例:

select ID, min(Type) as Type, min(Code) as Code, min(Opt) as Opt,
       min(Line) as Line, min(Status) as Status
from t
group by id
having count(*) = 1;

如果您的 Sybase 版本支持窗口函数:

select ID, Type, Code, Opt, Line, Status
from (select t.*,
             count(*) over (partition by id) as cnt
      from t
     ) t
where cnt = 1
于 2013-07-21T13:52:46.157 回答
0

我在上表中看到的唯一排序是,如果您在Code字段转换为char(). 以下是您可能正在寻找的使用max()and的猜测min()

select y.* 
from yourtable y
  join (
    select max(cast(Code as char(3))) maxCode,
      min(cast(Code as char(3))) minCode
    from yourtable
    ) t on y.code = t.maxCode or y.code = t.minCode
于 2013-07-21T13:33:42.977 回答