2014-01-12 5 views
0

У меня есть две таблицы.найти дубликаты в столбце (DB2, SQL)

первым в таблице Резервные счета (организации)

ID  IK 
1A  1 
2X  2 
3R  3 
4Q  3 
5E  5 
6A  5 
7B  5 
8N  8 
9Z  9 

Каждая учетная запись является частью группировки под названием IK и имеет ряд IK. Тот же номер означает часть той же группы IK. Некоторые учетные записи являются частью группы из 1, например, 1A, и некоторые группы IK имеют несколько членов, таких как IK 5, в которых есть 3 аккаунта.

Вторая таблица - это таблица расширений к таблице счетов. Идентификатор счета (org_ID) этой таблицы относится к ROW_ID таблицы счетов

ID  ORG_ID KRB_FLG 
1U  1A  Y 
2O  2X  N 
3K  3R  Y 
4L  4Q  N 
5F  5E  N 
6G  6A  Y 
7H  7B  Y 
8V  8N  Y 
9W  9Z  Y 

На столе расширения, то x_krb_flg указывает начальное число (значение = «Y») группы IK. Итак, org 1A является первичным из его IK (1). Org 3R является первичным из его IK (1-100-10). Каждая группа IK должна иметь не менее 1 первичной (значение «Y» в столбце X_KRB_FLG), а также максимум 1 первичный (следовательно, слово primary).

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

Я хочу, чтобы найти эти счета записи:

  • 2X (только член в ее И.К., но не является первичным)
  • 5E (его IK имеет два праймериз)
  • 6А (его И.К. имеет два праймериз)
  • 7B (его IK имеет два праймериз)
+0

Было бы лучше дать таблицу фактических результатов, а не просто объяснение (хотя то, что вы дали, понятно из точки зрения записей). Что вы пробовали до сих пор - продемонстрируйте свои усилия, так как это поможет нам лучше понять ваши фактические потребности. Какая версия/платформа DB2? Нужно ли нам что-либо делать с идентификатором 'ID' в таблице расширений? (и почему они являются буквами и цифрами?) Есть ли у вас какая-либо информация для аудита, например, 'made_primary_on' timestamps (самое последнее значение). Булевы часто получают информацию. –

ответ

0

Попробуйте это:

WITH T3 AS (
    SELECT T2.*, T1.IK 
    FROM T1 
    INNER JOIN T2 
    ON T1.ORG_ID = T2.ORG_ID 
    WHERE KRB_FLG = 'Y' 
) 
SELECT ORG_ID 
FROM T1 AS T 
WHERE 1 <> (SELECT COUNT(*) FROM T3 WHERE T3.IK = T.IK) 
; 

Редактировать: Here is a SQLfiddle, но синтаксис был изменен для mysql.

+0

Это сработало! Большое спасибо – user2992366

Смежные вопросы