2013-10-03 3 views
2

У меня есть таблица XYZ:Нужна помощь в автообъединении

ID A  B  C 
1 abc  ygh  NULL 
2 fgfd bjh  NULL 
3 jhkj fgd  cgbvc 
1 NULL NULL yr 
2 NULL NULL jg 

Мне нужно сделать автообъединение на вышеприведенной таблице, чтобы получить только идентификаторы соответствия. Я пытаюсь использовать ниже запроса:

Select T1.ID, T1.A, T1.B, T2.C 
From XYZ T1 
INNER JOIN XYZ T2 
where T1.ID = T2.ID 

Но не становится ниже результата:

1 abc  ygh  yr 
2 fgfd bjh  jg 

Пожалуйста посоветуйте. Кришна

+0

Всегда ли это, что A, B являются нулевыми или C является нулевым? – Szymon

ответ

0

Я думаю, вы хотите что-то вроде этого:

select T1.ID, T1.A, T1.B, T2.C from XYZ T1 
inner join XYZ T2 
on T1.ID = T2.ID 
where T1.A is not null and T1.B is not null and T2.C is not null 

По мере того как присоединиться к себе даст вам все комбинации T1 и T2, вы хотите один, где все столбцы не null.

2

Почему вы хотите использовать self join.

Tip: 'A' + NULL=NULL

select ID,max(A) A,max(B) B,max(C) C 
from XYZ 
where A+B+C is null 
group by ID 

SQL FIDDLE

0

Вы можете использовать ниже запрос, но его на основе ИНЕКЕ.

select ID,A,B,C from (
select *, ROW_NUMBER() over (partition by id order by s desc) as 'x' from (
Select T1.ID,T1.A,T1.B,T2.C,ROW_NUMBER() over (partition by t1.id order by  
t1.a,t1.b ,t1.c) as s 
From xyz T1 JOIN xyz T2 on T1.ID = T2.ID) abc) xyz 
where x = 1