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

У меня есть сценарий SQL, который возвращает набор результатов. Требуется вернуть набор результатов по умолчанию со значениями по умолчанию, если приведенный ниже сценарий не дает никаких результатов. Он должен иметь те же имена столбцов, что и приведенный ниже скрипт

 -- Return final results
    SELECT  
        p.worked                                                                           [AccountsWorked],
        p.rcmade                                                                       [RPC's],
        p.obtained                                                                             [PTPCount],
        p.amount                                                                          [PTPValue], 
                                                                                                [PreviousDayPTPValue]

    FROM
        @tab_performance p JOIN
        dbo.user usr ON
            (p.usr_code = usr.usr_code) JOIN
        dbo.team tme ON 
            (tme.tme_id = usr.tme_id)   
            AND p.usr_code = @usr_code

Мне нужно вернуть набор результатов по умолчанию, если строки не возвращаются. Таким образом, все столбцы должны быть возвращены с NULL или любым значением по умолчанию.

Я безуспешно пытался использовать операторы условного выбора, я также пытался @@ ROWCOUNT

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Вы можете добавить union all выбор к существующему запросу со значениями по умолчанию, подобными этому:

<your existing query>

union all

select null accounts_worked, null right_contacts_made, null ppts_obtained .....
where not exists(
select *
from @tab_performance p JOIN
        dbo.TR_USR_User usr ON
            (p.usr_code = usr.usr_code) JOIN
        dbo.TR_TME_Team tme ON 
            (tme.tme_id = usr.tme_id)   
            AND p.usr_code = @usr_code
)

Предложение where может быть еще более упрощено, если ваш inner joins не отфильтровывается любые строки от @tab_performance:

<your existing query>

union all 

select null accounts_worked, null right_contacts_made, null ppts_obtained .....
where not exists(
select *
from @tab_performance
where usr_code = @usr_code
)
0 голосов
/ 07 февраля 2020

Я бы сделал это с С и UNION ALL

Drop  table if exists #test
create table #test (
    Column1 int null,
    Column2 varchar(50) null
);

--INSERT INTO [#test] (Column1,Column2)
--VALUES        
--        (1, 'test'),
--        (2,'test2'),
--        (3,'test3');

WITH qry AS (
   select Column1, Column2 from #test
)
select * from qry
UNION ALL
select NULL as Colum1, null as Column2 where (select COUNT(*) from qry) = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...