Sql 这些也应该显示出来。巧合的是,@Gordons的答案返回了这个结果。同意,但不在规范中。拿走了公认的答案。然而,您的解决方案如何显示空值呢?我不介意您接受Gordon的答案。但是如果你也想要我的版本,为什么不编辑你的问题并添加一些空值呢? documen

Sql 这些也应该显示出来。巧合的是,@Gordons的答案返回了这个结果。同意,但不在规范中。拿走了公认的答案。然而,您的解决方案如何显示空值呢?我不介意您接受Gordon的答案。但是如果你也想要我的版本,为什么不编辑你的问题并添加一些空值呢? documen,sql,sql-server,Sql,Sql Server,这些也应该显示出来。巧合的是,@Gordons的答案返回了这个结果。同意,但不在规范中。拿走了公认的答案。然而,您的解决方案如何显示空值呢?我不介意您接受Gordon的答案。但是如果你也想要我的版本,为什么不编辑你的问题并添加一些空值呢? document_id group_id level -------------------------------- 1 1 1 2 1 1 3


这些也应该显示出来。巧合的是,@Gordons的答案返回了这个结果。同意,但不在规范中。拿走了公认的答案。然而,您的解决方案如何显示空值呢?我不介意您接受Gordon的答案。但是如果你也想要我的版本,为什么不编辑你的问题并添加一些空值呢?
 document_id    group_id    level
 --------------------------------
 1              1           1
 2              1           1
 3              2           3
 4              2           3
 5              2           2
 6              3           1
 7              4           6
 8              4           6
 9              4           6
10              5           2
11              5           1
 document_id    group_id    level
 --------------------------------
 3              2           3
 4              2           3
 5              2           2
10              5           2
11              5           1
select document_id, group_id, level
from tablename t1
where exists (select 1 from tablename t2
              where t2.group_id = t1.group_id
                and t2.level <> t1.level)
SQL>create table t (document_id int, group_id int, level int);
SQL>insert into t values( 1, 1, 1);
SQL>insert into t values( 2, 1, 1);
SQL>insert into t values( 3, 2, 3);
SQL>insert into t values( 4, 2, 3);
SQL>insert into t values( 5, 2, 2);
SQL>insert into t values( 6, 3, 1);
SQL>insert into t values( 7, 4, 6);
SQL>insert into t values( 8, 4, 6);
SQL>insert into t values( 9, 4, 6);
SQL>insert into t values(10, 5, 2);
SQL>insert into t values(11, 5, 1);
SQL>select document_id, group_id, level
SQL&from t t1
SQL&where exists (select 1 from t t2
SQL&              where t2.group_id = t1.group_id
SQL&                and t2.level <> t1.level);
document_id    group_id       level
=========== =========== ===========
          3           2           3
          4           2           3
          5           2           2
         10           5           2
         11           5           1

                  5 rows found
select document_id, group_id, level
from tablename t1
where exists (select 1 from tablename t2
              where t2.level <> t1.level
                and t2.group_id = t1.group_id)
select document_id, group_id, level
from (select t.*, min(level) over (partition by group_id) as minlevel,
             max(level) over (partition by group_id) as maxlevel
      from t
     ) t
where minlevel <> maxlevel;