2016-09-15 3 views
0

У меня есть 2 таблицы: accounthierarchy и accountvaluetotal.Как присоединиться 2 Таблица, когда ключ находится в разных столбцах

Ссылка между двумя таблицами - номер счета. Я хочу присоединиться к таблице на основе номера счета. Но номер счета таблицы «Иерархия учетных записей» находится на другом уровне (столбец).

Не могли бы вы помочь мне, как это сделать? Thanks

CREATE TABLE [dbo].[accounthierarchy](
[ID] [int] NULL, 
[level1] [int] NULL, 
[level2] [int] NULL, 
[level3] [int] NULL, 
[level4] [int] NULL, 
[level5] [int] NULL) 

INSERT INTO [dbo].[accounthierarchy] (ID,level1,Level2,level3,level4,level5) 
VALUES 
(1,100,null,null,null,null), 
(2,100,110,null,null,null), 
(3,100,110,1110,null,null), 
(4,200,220,null,null,null), 
(5,200,230,null,null,null), 
(5,200,240,null,null,null), 
(6,200,240,2410,null,null) 

CREATE TABLE [dbo].[accountvaluetotal](
[accountnumber] [int] NULL, 
[values] [int] NULL 
) 

insert into [dbo].[accountvaluetotal] 
values 
(1110,5000), 
(220,7400), 
(230,6200), 
(2410,5600) 
+0

Определите первичный и внешний ключ (ы) (используйте [править]). –

+0

Привет всем, извините за недоразумение, я хотел бы получить результат следующим образом: – phalondon

ответ

0

Исходя из того, что номер счета является «последним» значением в таблице accounthierarchy;

SELECT ID, COALESCE(ac.level5,ac.level4,ac.level3,ac.level2,ac.level1) as AccountNumber 
from [accounthierarchy] ac 

будет затем дать вам номер счета, к которому вы можете сделать стандартный присоединиться

COALESCE дает первое ненулевое значение из списка значений, поэтому при переходе от 5-го уровня в уровень 1, он вернет какое бы то ни было действительное значение, которое оно приходит вначале.

1

вы можете использовать INNER сшиваемого

SELECT * 
FROM accounthierarchy 
INNER JOIN accountvaluetotal 
ON level13=accountnumber; 
Смежные вопросы