从另一个表返回的值与第一个表的值匹配

时间:2020-03-23 19:50:05

标签: sql sql-server tsql join

我有一个简单的问题。我有表A和B,都包含3个公共列(name, id, date),除了这3个表外,两个表都有一组完全不同的列。

现在,出于可视化目的,我需要将表B中的数据与表A相关联。由于我对SQL不太满意,所以我想问一问是否有可能,因为我在表A中已经有了一个简单的列,所以我知道可以计算列。但是我想做这样的事情:

表A中的新列,其中包含表A的名称,日期和ID匹配表B的名称,日期和ID(如果没有匹配项保留为空)的任何行,其中包含表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 Server中完成吗?

2 个答案:

答案 0 :(得分:2)

您正在描述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 :(得分:2)

是的,有可能。但是,为了引用计算列中的另一个表,您必须通过创建用户定义的函数来实现。这将具有name,date,id作为输入参数,如果表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))
相关问题