Oracle SQL Plus Сокращение принципиально равных строк в одну строку - PullRequest
0 голосов
/ 02 декабря 2018

Извинения, если меня спросили и ответили, я не смог найти подобное решение.

У меня есть таблица

+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
| valA    | valB    | valC    |
+---------+---------+---------+
| valA    | valB    | valD    |
+---------+---------+---------+

Мне нужно написать запрос, который идентифицирует этот конфликт между этимидве строки и распечатывает col 1, col2, col3 valC, col3 valD.

То, что я пробовал, это

select distinct t1.column1, t1.column2, t1.column3, t2.column3
from table t1 inner join table t2 on t1.column2 = t2.column2
where t1.column1 = t2.column2
and t1.column3 <> t2.column3

В результате получается следующее:

+---------+---------+---------+---------+
| column1 | column2 | column3 | column4 |
+---------+---------+---------+---------+
| valA    | valB    | valC    | valD    |
+---------+---------+---------+---------+
| valA    | valB    | valD    | valC    |
+---------+---------+---------+---------+

Второй ряд принципиально идентичен первому и поэтому является избыточным иЯ бы хотел, чтобы он не показывался.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Таким образом, вы хотите сравнить, отличается ли column3 для группы записей в (col1, col2).

select col1,col2,max(col3),min(col3)
 from table
group by col1,col2
having max(col3) <> min(col3)
0 голосов
/ 02 декабря 2018

Ваш подход будет работать нормально, но вам просто нужно <:

select distinct t1.column1, t1.column2, t1.column3, t2.column3
from table t1 inner join
     table t2
     on t1.column1 = t2.column1 and
        t1.column2 = t2.column2 and
        t1.column3 < t2.column3;

Обратите внимание, что это исправляет сравнения столбцов в вашем коде.

Однако я могу быть более склонениспользовать агрегацию:

select column1, column2,
       listagg(column3, ',') within group (order by column3) as column3s
from table t
group by column1, column2
having min(column3) <> max(column3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...