2015-11-12 3 views
3

У меня есть записи в таблице, как показано на прилагаемом изображении. Все, что мне нужно найти те записи, у которых есть один и тот же «sortorder» другой «packageboxtypeid» w.r.t «CCID». Поэтому нам нужно найти те записи, которые имеют одинаковый CCID, один и тот же порядок сортировки, но другой тип packageboxtypeid. Пожалуйста помоги. enter image description hereЧтобы найти записи, которые имеют одинаковые

ответ

4

Похоже, что-то вроде этого будет работать. Используя INNER JOIN с SELECT *, вы можете сравнить записи бок о бок.

SELECT * 
FROM [Table] A 
    INNER JOIN [Table] B 
     ON A.CCID = B.CCID 
      AND A.SortOrder = B.SortOrder 
      AND A.PackageBoxTypeId <> B.PackageBoxTypeId 

Однако, если вам просто нужен чистый список записей вместо сравнения бок о бок, вы можете использовать коррелированный подзапрос с EXISTS или IN, как @gmiley указывает в комментариях. Я выбрал EXISTS в качестве примера, так как не знаю, имеет ли ваш PackageBoxTypeId значения NULL, но я уклоняюсь от IN, когда есть столбцы NULL.

SELECT * 
FROM [Table] A 
WHERE EXISTS (
    SELECT * 
    FROM [Table] 
    WHERE CCID = A.CCID 
     AND SortOrder = A.SortOrder 
     AND PackageBoxTypeId <> A.PackageBoxTypeId 
) 
+1

Был как раз собирался опубликовать то же самое. Я также хотел бы включить, что наряду с 'JOIN' вы можете использовать подзапрос через' EXISTS' или 'IN' для аналогичного эффекта. – gmiley

+0

Согласитесь полностью. Я выбрал 'JOIN', чтобы вы могли сравнивать 2 записи бок о бок, а не просто чистый список записей, которые не сопоставляются, но требования к бизнесу могут диктовать либо на основе того, что вы хотите с ним делать. –

2
SELECT DISTINCT t1.* 
FROM table1 t1 
INNER JOIN table1 t2 
    ON t1.CCID = t2.CCID 
    AND t1.sortorder = t2.sortorder 
    AND t1.packageboxtypeid <> t2.packageboxtypeid 
Смежные вопросы