Вернуть все строки, в которых одно поле одинаковое, но в остальных полях есть хотя бы одно различие - PullRequest
1 голос
/ 27 октября 2011

Я пытаюсь написать запрос, который будет возвращать записи, в которых поле в столбце 1 совпадает, но в некоторых других столбцах есть хотя бы одно различие.

Например:
Я хочу сравнить столбцы 2 и 4 для каждого значения в столбце 1. Если есть разница, мне нужно вернуть все поля в обеих строках.

Этот набор данных
Column1 | Столбец2 | Column3 | column4 | Column5
Воздушный фильтр | Форма | Круглая | Цвет | Красный
Воздушный фильтр | Форма | Панель
Nerf Bar | Отделка | Отполированный | Материал | Нержавеющая сталь
Бар Nerf | Отделка | Покрынный порошок | Материал | Нержавеющая сталь
Клобук | Цвет | Черный | Отделка | Порошок с покрытием
Капюшон | Отделка | Порошок с покрытием | Цвет | Черный

вернется:
Воздушный фильтр | Форма | Круглая | Цвет | Красный
Воздушный фильтр | Форма | Панель | NULL | NULL
потому что значение в столбце 4 не совпадает между записями
И
Клобук | Цвет | Черный | Отделка | Порошок с покрытием
Клобук | Отделка | Порошок с покрытием | Цвет | Черный
потому что значения в столбце 2 и столбце 4 не совпадают между записями

Я могу получить только одну запись для каждой части для возврата.

Вот код, который я пробовал:

Select *
from [My_Table] as a 
where exists(select null from [My_Table] as b
where a.column1 = b.column1
and (a.column2 = b.column2
or a.column3 = b.column3
or a.column4 = b.column4
or a.column5 = b.column5))

1 Ответ

1 голос
/ 27 октября 2011
SELECT t1.column1, t1.column2, t1.column3, t1.column4, t1.column5
    FROM My_Table t1
        INNER JOIN My_Table t2
            ON t1.column1 = t2.column1
    WHERE COALESCE(t1.column2,'') <> COALESCE(t2.column2,'')
        OR COALESCE(t1.column4,'') <> COALESCE(t2.column4,'')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...