2016-10-31 4 views
1

у меня есть две таблицы, как это:SQL Server 2008, как для объединения таблиц по различным атрибутам

Таблица A:

ID VAL 
1 10 
2 20 
3 30 
4 40 
5 50 

Таблица B:

ID VAL2 
sd 50 
gh 80 
dv 90 
bf 100 
ww 45 

Регистрация стол:

ID Val VAL2 
1 10 50 
2 20 100 
3 30 45 
4 40 80 
5 50 90 

Так, ID в таблице А сопоставляется с ID в таблице B

1 - sd, 2 - bf, 3 - ww, 4 - gh, 5 - dv 

Как я могу присоединиться к этим двум?

select A.ID, A.VAL, B.Val 
from tableA A 
**left join tableB B on A.ID = B.ID ??** 

Спасибо!

+2

Вы должны [присоединиться к RowNumber] (http://stackoverflow.com/a/12972355/2441442). Но вы не должны этого делать. Лучше читать о * системе реляционных баз данных * и * нормализации *. –

+0

Как вы принимаете 1 - sd, 2 - bf, 3 - ww, 4 - gh, 5 - dv ?? любое правило здесь? –

+0

выберите * в #abc из (выберите (случай, когда id = 'sd', затем 1, когда id = 'bf', затем 2, когда id = 'ww', затем 3, когда id = 'gh', а затем 4 else 5 end) как idd, * from TableB) b выберите tempabc.idd, a.val, tempabc.val from #abc tempabc join TableA a на a.id = tempabc.idd по idd – Ankit

ответ

0

Одним из вариантов, который не требует использования временной таблицы, было бы создание встроенной таблицы, содержащей сопоставления значений идентификатора таблицы A с значениями идентификатора таблицы B.

SELECT t1.ID AS ID 
     t1.VAL AS Val, 
     t3.VAL2 AS Val2 
FROM tableA t1 
INNER JOIN 
(
    SELECT 1 AS IDA, 'sd' AS IDB 
    UNION ALL 
    SELECT 2 AS IDA, 'bf' AS IDB 
    UNION ALL 
    SELECT 3 AS IDA, '22' AS IDB 
    UNION ALL 
    SELECT 4 AS IDA, 'gh' AS IDB 
    UNION ALL 
    SELECT 5 AS IDA, 'dv' AS IDB 
) t2 
    ON t1.ID = t2.IDA 
INNER JOIN tableB t3 
    ON t2.IDB = t3.ID 
0
SELECT a.ID, a.VAL, B.VAL2 FROM 
(
SELECT CASE WHEN ID = 'sd' THEN 1 
WHEN ID = 'bf' THEN 2 
WHEN ID = 'ww' THEN 3 
WHEN ID = 'gh' THEN 4 
WHEN ID = 'dv' THEN 5 
END AS ID, VAL2 FROM tableB 
) AS t INNER JOIN tableA a ON a.ID = t.Id 
Смежные вопросы