Я пытался использовать оператор CASE, чтобы изменить условие соединения в зависимости от входных значений на сервере sql. У меня есть пример для объяснения этого, как показано ниже:
go
declare @parentNumber int=0
declare @parent table (prowid bigint,name varchar(200));
insert into @parent (prowid,name) values (1,'A');
insert into @parent (prowid,name) values (2,'B');
declare @child table(crowid bigint,prowid bigint,prowid2 bigint, name varchar(200));
insert into @child (crowid,prowid,prowid2,name) values (1,1,2,'AA_BA')
insert into @child (crowid,prowid,prowid2,name) values (2,1,2,'AB_BB')
insert into @child (crowid,prowid,prowid2,name) values (3,1,2,'AC_BC')
--parentname will be of prowid
select pr.name as ParentName,ch.* from @parent pr
inner join @child ch on
(CASE WHEN @parentNumber=0 THEN ch.prowid ELSE ch.prowid2 END)=pr.prowid
SET @parentNumber=1
--parentname will be of prowid2
select pr.name as ParentName,ch.* from @parent pr
inner join @child ch on
(CASE WHEN @parentNumber=0 THEN ch.prowid ELSE ch.prowid2 END)=pr.prowid
go
У меня есть параметр таблицы, так что вы можете работать напрямуюв вашем окне запроса, насколько я знаю, операторы case замедляют выполнение запроса.так что я здесь, если кто-нибудь может предложить мне лучшее решение ... кроме использования другого соединения ... как
select * from @child ch
inner join @parent p on p.prowid=ch.prowid
inner join @parent p2 on p.prowid=ch.prowid2
в ожидании ответа каждого ........