Возвращаемое значение из другой таблицы, которая соответствует значениям из первой таблицы - PullRequest
0 голосов
/ 23 марта 2020

У меня простая проблема. У меня есть таблицы A и B, обе содержат 3 общих столбца (name, id, date), и помимо этих 3, обе таблицы имеют совершенно разный набор столбцов.

Теперь мне нужно связать данные из таблицы B с таблицей A для целей визуализации. Поскольку я не очень хорошо разбираюсь с SQL, я подумал, что могу спросить, возможно ли это, я знаю, что могу вычислить столбцы, поскольку у меня уже есть один в таблице A для чего-то простого. Однако я хочу сделать что-то вроде этого:

Новый столбец в таблице A, который содержит значение столбца «Специальный» из таблицы B для любой строки, где имя, дата и идентификатор из таблицы A соответствуют имени, дате и идентификатор для таблицы B, если нет совпадений, оставить пустым или пустым.

Пример

Таблица A:

Name | Date          | ID  | OtherData1     | OtherData2
-----+---------------+-----+----------------+-------------
John | March 2020    | SPC | Randomstuff    | randomstuff
Doe  | March 2020    | SPC | Randomstuff    | randomstuff
John | February 2020 | SPC | RandomStuff    | RandomStuff
Doe  | February 2020 | SPC | Randomstuff    | randomstuff

Таблица B:

Name | Date          | ID  | MoreData1     | SomeData2     | Special
-----+---------------+-----+---------------+---------------+--------
John | March 2020    | SPC | Randomstuff   | randomstuff   | True
Doe  | March 2020    | SPC | Randomstuff   | randomstuff   | False
John | February 2020 | SPC | RandomStuff   | RandomStuff   | True
Doe  | February 2020 | SPC | Randomstuff   | randomstuff   | True

Результат в таблице A:

Name | Date          | ID  | OtherData1    |OtherData2   | SpecialImported
-----+---------------+-----+---------------+-------------+----------------
John | March 2020    | SPC | Randomstuff   | randomstuff | True
Doe  | March 2020    | SPC | Randomstuff   | randomstuff | False
John | February 2020 | SPC | RandomStuff   | RandomStuff | True
Doe  | February 2020 | SPC | Randomstuff   | randomstuff | True

Можно ли это сделать на SQL сервере?

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Вы описываете left join:

select a.*, b.special special_imported
from tablea a
left join tableb b
    on a.name = b.name
    and a.date = b.date
    and a.id = b.id
1 голос
/ 23 марта 2020

Да, это возможно. Но чтобы ссылаться на другую таблицу в вычисляемом столбце, вы должны сделать это путем создания пользовательской функции. Он будет иметь имя, дату, идентификатор в качестве входных параметров и будет выводить бит, если такая комбинация существует в таблице B. Что-то вроде:

CREATE FUNCTION [dbo].[f_check_tableB_tuple](@name nvarchar(max),@date datetime,@ID nvarchar(max))

RETURNS bit
as
begin
declare @result bit
select @result=Special from tableB where name=@name and date=@date and ID=@ID

RETURN @result

end

Затем вы можете использовать эту функцию в вычисляемом столбце:

alter table tableA add SpecialImported as (dbo.f_check_tableB_tuple(name,date,ID))
...