2016-04-27 3 views
-1
select sum(l.coins) - sum(t.coins) as total 
from luxx_getaway_2016_coins l 
join thrive_rewards_redeemed t 
on l.consid = t.guideid 
where l.consid = 24969 and t.harvestyear = 1516 

Hello all. Я пытаюсь получить обновленную сумму, используя указанный выше запрос. Проблема, с которой я сталкиваюсь, состоит в том, что общая сумма этих сумм составляет намного выше того, что должно быть. Я не уверен, что я делаю неправильно. Мы используем базу данных Azure SQL, и я использовал RazorSQL и SSMS 2012 для запуска этого запроса с одинаковыми результатами. Любая помощь приветствуется. Пожалуйста, не стесняйтесь просить разъяснений.Почему мой вычитание не корректно?

+0

Что возвращается, если вы просто выбрать строки, без суммы? например 'Выбрать * из luxx_getaway_2016_coins л присоединиться thrive_rewards_redeemed т на l.consid = t.guideid где l.consid = 24969 и t.harvestyear = 1516' – APH

+1

ли' 'l.consid' и t.guideid' уникальным в своих соответствующих таблицы? если нет, вы получите дубликаты, когда вы присоединитесь. – rdbradshaw

+0

@APH Список всех полей из обеих таблиц. Теперь я могу понять, почему я получаю то общее, что получаю. Для каждой позиции в одной таблице создается дублируемая позиция для соединяемой таблицы. Поэтому, если у меня есть 10 строк в одной таблице и одна строка в другой, то с наименьшими строками необходимо создать столько строк, сколько будет создаваться другой таблицей. – acecabana

ответ

0

Простое решение вашей проблемы дублирования:

Select 
    (select sum(l.coins) 
    from luxx_getaway_2016_coins l 
    where l.consid = 24969) 

- 
    (select sum(t.coins) 
    from thrive_rewards_redeemed t 
    where t.guideid = 24969 
     and t.harvestyear = 1516) 

Для более общего случая:

; With A as (select consid, sum(l.coins) as TotA 
    from luxx_getaway_2016_coins l 
    group by consid) 
, B as (select guideid, sum(t.coins) as TotB 
    from thrive_rewards_redeemed t 
    where t.harvestyear = 1516 
    group by guideID) 

Select a.consid, TotA - TotB as Total 
from A 
inner join B 
on a.Consid = b.GuideID 
+0

Это сработало для этого запроса. Спасибо. Мой следующий шаг - выяснить, как применить этот принцип и сделать вид с монетами для всех consid. – acecabana

+0

@acecabana - Я отредактировал ответ, чтобы показать один способ сделать это с общим случаем. Я сейчас не на своем главном компьютере, поэтому не проверял его. – APH

+0

Любой способ применить полное соединение и не показывать ли ему нулевые значения для несоответствующих строк? Я хотел бы сделать вычитание для ids, которые существуют в обеих таблицах, но сохранить все записи из таблицы a вместе с обновленными итогами из вычитания. – acecabana

Смежные вопросы