2013-08-28 3 views
0

table1:T-SQL - фильтрация запросов

Id   Customer No_ 
7044900804 Z0172132 
7044900804 Z0194585 
7044907735 Z0172222 
7044907735 Z0172222 
7044910337 Z0172216 
7044911903 Z0117392 

Я хотел бы получить только значение с же Ид и другим Клиентом no_ из table1.

Id   Customer No_ 
7044900804 Z0172132 
7044900804 Z0194585 

Я уже пытался использовать запрос для поиска дубликатов, но это не будет фильтровать значения с же Ид и тот же Клиент no_ из table1.

SELECT Id 
     , [Customer No_] 
    FROM table1 
GROUP BY Id, [Customer No_] 
HAVING COUNT(*) > 1 

Не могли бы вы помочь мне с T-SQL решения запроса? Спасибо за все советы.

ответ

3

Попробуйте

SELECT * FROM table1 WHERE Id IN 
(
    SELECT Id 
     FROM table1 
    GROUP BY Id 
    HAVING COUNT(DISTINCT [Customer No_]) > 1 
) 

SQL FIDDLE DEMO

+0

Это отлично работает. Быстро и просто. Я только немного отредактировал запрос и использовал его. 'SELECT DISTINCT * FROM table1 WHERE ID IN ( ВЫБОР Id ОТ таблица1 GROUP BY Id HAVING COUNT (DISTINCT [Клиент no_])> 1 )' – Rutz

0

Пожалуйста, попробуйте:

SELECT * FROM (
    SELECT 
     *, 
     COUNT(*) OVER (PARTITION BY id, [Customer No_]) C1, 
     COUNT(*) OVER (PARTITION BY id) C2 
    FROM 
     YourTable 
)x WHERE C1<>C2 
+0

Выполнение этого запроса занимает слишком много времени, и в этом случае. Но спасибо за ваш ответ. – Rutz

0

Try:

SELECT ID, [Customer No_] 
FROM table1 
WHERE ID IN (SELECT ID 
      FROM table1 
      GROUP BY ID 
      HAVING count(*) > 1) 

SQL Fiddle

1

Я думаю, что самый простой способ это просто соединить таблицу вместе два раза, где идентификаторы соединяются, но Клиент No_s не соответствует.

select t1.id, t1.[customer No_], t2.[customer No_] 
from table1 t1 
inner join table1 t2 
on t1.id = t2.id 
and t1.[customer No_] != t2.[customer No_] 
+0

Это разумно, если для каждого ID не более двух клиентов No_s. Если есть, например, три клиента за один идентификатор вы получите шесть строк вывода! – krisku

+0

Благодарим вас за ввод. Для каждого идентификатора может быть более двух клиентов No_s, поэтому объединение двух таблиц, подобных этим, не будет работать. Но снова спасибо, очень признателен. – Rutz

0

Запрос:

SELECT t1.Id 
     ,t1.[Customer No_] 
FROM table1 t1 
JOIN (SELECT Id, COUNT(*) as cnt 
     FROM table1 
     GROUP BY id) 
ON t1.id = t2.id 
WHERE t2.cnt > 1 
Смежные вопросы