问题在于:我在表中有两列,对于每个分组,应该具有相同的顺序.在我做出这个假设之前,我想检查现有数据是否属实.
一些示例数据:
gid c1 c2
1 1 5
1 2 7
2 1 22
2 2 38
2 3 40
3 1 4
3 2 8
3 3 2
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,如果我使用
select * from table t where t.gid = 1 order by c1
的结果将是相同的,并按相同的顺序排序
select * from table t where t.gid = 1 order by c2.
结果也匹配gid = 2.但是,如果我对gid = 3做同样的事情,那么订单将不再匹配.因为,在这种情况下,排序方式c2与排序方式有不同的结果c1.
我想检查整个表,以确保这些列中的任何一个的排序对于每个值都具有相同的结果gid.Oracle MINUS不会工作,因为order by子查询中不允许这样做 .我的第一次尝试,由于其局限性而无效MINUS,是:
select gid, c1, c2 from table order by gid, c1, c2
minus
select gid, c1, c2 from table order by gid, c2, c1;
Run Code Online (Sandbox Code Playgroud)
我正在使用oracle 11g,如果这有助于答案.
通过分配row_number,您可能会在同一记录中找到顺序不同.
with ordering as (
select t.*,
row_number() over (partition by gid
order by c1) order_c1,
row_number() over (partition by gid
order by c2) order_c2
from t
)
select *
from ordering
where order_c1 <> order_c2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2002 次 |
| 最近记录: |