У меня есть 4 таблицы (table1-table4), содержащие имена и значения, связанные с этими именами, например:
table1
ID Name_1 Name_2
1 Jeff Jeff
2 Nancy Jasmine
table2
ID Name_1 Name_2
3 Jeff Jeff
4 Nancy Nancy
Таблица3
Name Value
Jeff 5.5
Nancy 6.5
1012 * Таблица 4 *
Name Value
Jeff 7.5
Nancy 8.5
Мне нужно получить ID # из таблицы 1 и значение из таблиц 3 ИЛИ 4 в зависимости от того, как имена расположены между таблицами 1 и 2 (будут другие таблицы, из которых можно получить возвращаемое значение, но сейчас я просто пытаюсь прибить 2).
Пример .... В приведенных выше таблицах Джефф появляется дважды в таблице 1 и дважды в таблице 2, поэтому я хочу вернуть идентификатор № 1 из таблицы 1 со значением 5,5 из таблицы 3, в то время как Нэнси появляется один раз в таблице 1 и дважды в таблице 2, поэтому Я хочу вернуть идентификатор № 2 из таблицы 1 и значение 8,5 из таблицы 4. Всего так:
ID Value
1 5.5 (based on the sharing between table1 and table 2 return value from table 3)
2 8.5 (based on the sharing between table1 and table 2 return value from table 4)
у меня есть:
SELECT dbo.table1.ID
CASE
WHEN((dbo.table2.Name_1)=(dbo.table2.Name_2) AND
(dbo.table1.Name_1)=(dbo.table1.Name_2) AND
(dbo.table2.Name_1)=(dbo.table1.Name_1) AND
(dbo.table2.Name_2)=(dbo.table1.Name_2) AND
(dbo.table2.Name_1)=(dbo.table1.Name_2) AND
(dbo.table2.Name_2)=(dbo.table2.Name_1)) THEN (SELECT dbo.table3.Value FROM dbo.table3 WHERE dbo.table3.Name = dbo.table2.Name_1)
ELSE Null
END AS Value
FROM dbo.table1, dbo.table3
INNER JOIN dbo.table2 ON dbo.table3.Name = dbo.table2.Name_1
Что возвращается, так это:
ID# Value
1 5.5
2 NULL
Существует еще больше способов совместного использования имен между таблицами 1 и 2, и мне нужны значения, возвращаемые из соответствующих таблиц, в зависимости от общего доступа.
Если бы я хотел вернуть Нэнси, я бы написал следующий запрос так:
SELECT dbo.table1.ID
CASE
WHEN((dbo.table2.Name_1)=(dbo.table2.Name_2) AND
(dbo.table1.Name_1)<>(dbo.table1.Name_2) AND
(dbo.table2.Name_1)=(dbo.table1.Name_1) AND
(dbo.table2.Name_2)<>(dbo.table1.Name_2) AND
(dbo.table2.Name_1)<>(dbo.table1.Name_2) AND
(dbo.table2.Name_2)=(dbo.table2.Name_1)) THEN (SELECT dbo.table4.Value FROM dbo.table4 WHERE dbo.table4.Name = dbo.table2.Name_1)
ELSE Null
END AS Value
FROM dbo.table1, dbo.table4
INNER JOIN dbo.table2 ON dbo.table4.Name = dbo.table2.Name_1
Я получаю:
ID# Value
1 NULL
2 8.5
Что касается меня, я не могу понять, как объединить их в один результат, подобный этому:
ID# Value
1 5.5
2 8.5
У кого-нибудь есть идеи о том, как я могу это сделать или какие изменения я могу внести в то, что я должен сделать? Сначала я попытался добавить несколько случаев, но поскольку мне нужно было выбрать одну из двух таблиц и объединить их, это просто не сработало (или, по крайней мере, я не знаю, как это сделать).