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;