Как игнорировать нулевые значения в функции t-sql? - PullRequest
0 голосов
/ 31 мая 2018

Я делаю внешнее соединение двух таблиц рыночных данных.Обе таблицы имеют объем торгов, сообщаемый по-разному, поэтому мне нужно запрашивать их отдельно, а затем суммировать результаты.

Проблема в том, что второй запрос относится к условию торговли, которое случается не часто и поэтому иногда не дает результата.Таким образом, c.volume имеет значение, а md.volume имеет значение null, и в результате добавления я получаю значение NULL.

Как сделать так, чтобы оно рассматривало ноль как 0?

select 
    c.the_time, c.symbol, c.volume + md.volume 
from 
    -- These are single shares
    (select 
         (time_stamp / 100000) as the_time, symbol, 
         sum(size) as volume 
     from 
         [20160510]
     where 
         price_field = 0
         and (size > 0
         and tradecond != 0)
     group by 
         (time_stamp / 100000), symbol) as c
full outer join 
    (select 
         d.the_time, d.symbol, d.volume as volume 
     from 
         -- These are single shares when multiplied by -1
        (select 
             (time_stamp / 100000) as the_time, symbol, sum(size) * -1 as volume 
         from 
             [20160510]
         where 
             price_field = 0
             and size < 0
         group by 
             (time_stamp / 100000), symbol) as d) as md on md.the_time = c.the_time 
                                                        and md.symbol = c.symbol

1 Ответ

0 голосов
/ 31 мая 2018

вы должны рассмотреть возможность использования COALESCE.Обратите внимание, что вы также можете использовать ISNULL, но COALESCE - это стандартная функция ANSI.См. справочную ссылку .

Ваш запрос после использования COALESCE будет выглядеть как

select 
    c.the_time, c.symbol, COALESCE(c.volume,0) + COALESCE(md.volume ,0)
from 
    -- These are single shares
    (select 
         (time_stamp / 100000) as the_time, symbol, 
         sum(size) as volume 
     from 
         [20160510]
     where 
         price_field = 0
         and (size > 0
         and tradecond != 0)
     group by 
         (time_stamp / 100000), symbol) as c
full outer join 
    (select 
         d.the_time, d.symbol, d.volume as volume 
     from 
         -- These are single shares when multiplied by -1
        (select 
             (time_stamp / 100000) as the_time, symbol, sum(size) * -1 as volume 
         from 
             [20160510]
         where 
             price_field = 0
             and size < 0
         group by 
             (time_stamp / 100000), symbol) as d) as md on md.the_time = c.the_time 
                                                        and md.symbol = c.symbol
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...