我有一个简单的问题。我有表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中完成吗?
答案 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))