Возвращаемый параметр, если в дочерней таблице встречаются некоторые условия - PullRequest
0 голосов
/ 27 января 2020

У меня есть такая таблица

Родительская таблица

id, column1,  etc
-    -         -     
-    -         -     

Подробно

id, parent_id, column1, actual_finish (value is true/false)
 -     -            -           -      
 -     -            -           -          

Я хочу проверить, все ли столбцы actual_finish имеют значение true, затем return 1 (я думаю, что это будет возвращаемый параметр), иначе return 0.

Например,

parent

id   column1  etc,
------------------
1    value1    a 

Detail

id, parent_id, column1, actual_finish (value is true/false)
------------------------------------------------------------
1       1         a           true
2       1         b           false

Это вернет 0, потому что фактическое значение fini sh во второй строке равно false, но если столбец фактической строки во второй строке current_fini sh обновлен до true, тогда вернется 1

Я хочу создать хранимую процедуру, которая возвращает 0 или 1 на основе столбца actual_finish в таблице detail.

Может ли кто-нибудь мне помочь?

Ответы [ 4 ]

0 голосов
/ 27 января 2020

Я бы порекомендовал использовать exists. Для обработки нескольких строк в parents:

select p.*,
       (case when exists (select 1
                          from details d
                          where d.parent_id = p.id and
                                d.actual_finish = 'false'
                         )
             then 0 else 1
        end) as flag
from parents p;
0 голосов
/ 27 января 2020

попробуйте использовать,

select min(case when actual_finish='true' then 1 else 0 end) from tab_Detail where parent_id=1;

SP, что-то вроде ..

create procedure getStatusById
(@id int)
as
begin
declare @res as int=0
set @res=(select min(case when actual_finish='true' then 1 else 0 end) from tab_Detail
where parent_id=@id);
return @res
print(@res)
end

Fiddle

0 голосов
/ 27 января 2020

Я думаю, что требование состоит в том, что существует даже одна строка, где actual_fni sh имеет значение false, а затем возвращает 0.

declare @res as int=1
If exists(select 1 from dbo.tbldetail where actual_finish='false')
set @res=0

actual_finish должно быть BIT тип данных (0 или 1)

0 голосов
/ 27 января 2020

Запрос, который вы можете использовать:

Select returnvalue= case when totalCount=trueCount then 1 else 0 end 
from
(select 
    trueCount=count (case when actual_finish ='true' then 1 else 0 end), 
    totalCount = count(1)
from
parent p left join detail d
    on p.id=d.parent_id
group by p.id
)T

Это предполагает, что вы возвращаете false, если в таблице подробностей нет строки для родительского идентификатора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...