Sql server 基于排序的动态连接条件

Sql server 基于排序的动态连接条件,sql-server,Sql Server,我有三张桌子 CREATE TABLE TableA(SomeID INT NOT NULL, Ranking smallint not null) INSERT INTO TableA(1,1) INSERT INTO TableA(2,2) INSERT INTO TableA(3,1) INSERT INTO TableA(4,1) INSERT INTO TableA(5,2) 我有两个详细的表,希望根据排名列从表A中确定连接条件 CREATE TABLE TableB(SomeID

我有三张桌子

CREATE TABLE TableA(SomeID INT NOT NULL, Ranking smallint not null)

INSERT INTO TableA(1,1)
INSERT INTO TableA(2,2)
INSERT INTO TableA(3,1)
INSERT INTO TableA(4,1)
INSERT INTO TableA(5,2)
我有两个详细的表,希望根据排名列从表A中确定连接条件

CREATE TABLE TableB(SomeID INT NOT NULL, Somedetailedinfo varchar(10))
INSERT INTO TableB(1,'2019-10-21')
INSERT INTO TableB(2,'2018-10-21')
INSERT INTO TableB(3,'2017-10-21')
INSERT INTO TableB(4,'2016-10-21')
INSERT INTO TableB(5,'2015-10-21')

CREATE TABLE TableC(SomeID INT NOT NULL, Somedetailedinfo varchar(10))
INSERT INTO TableC(1,'2016-10-21')
INSERT INTO TableC(2,'2015-10-21')
INSERT INTO TableC(3,'2014-10-21')
INSERT INTO TableC(4,'2013-10-21')
INSERT INTO TableC(5,'2012-10-21')
我想加入TableA和TableB或TableC,这取决于排名的价值。 如果排名=1,则将表A与表B连接起来 如果排名=2,则将表A与表C连接起来

预期产量为

SomeID,Somedetailedinfo
1,'2019-10-21'
2,'2015-10-21'
3,'2017-10-21'
4,'2016-10-21'
5,'2012-10-21'
如何执行此操作?

假设您的示例数据如下所示:

该要求意味着您有一个非规范化问题,但是,您可以使用2个
左连接来实现这一点:

SELECT A.SomeID,
       ISNULL(B.Somedetailedinfo,C.Somedetailedinfo) AS Somedetailedinfo
FROM TableA A
     LEFT JOIN TableB B ON A.SomeID = B.SomeID
                       AND A.Ranking = 1
     LEFT JOIN TableC C ON A.SomeID = C.SomeID
                       AND A.Ranking = 2;

到目前为止,您尝试了什么?
左键连接两个表。在
上的
中,在
SomeID
中包含相应的
排名
值。在
Where
子句中,从表
B
C
中筛选出
NULL
值。该示例数据,第二组是否意味着有
TableB
两次?
SELECT A.SomeID,
       ISNULL(B.Somedetailedinfo,C.Somedetailedinfo) AS Somedetailedinfo
FROM TableA A
     LEFT JOIN TableB B ON A.SomeID = B.SomeID
                       AND A.Ranking = 1
     LEFT JOIN TableC C ON A.SomeID = C.SomeID
                       AND A.Ranking = 2;