2014-09-21 4 views
0

У меня есть две таблицы sales и sales_stg. Первый - исходная таблица, а вторая - промежуточная таблица.Получение недопустимого значения в выбранном запросе

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

DDL заявление DML и запросы аудита приведены в SQL скрипке http://www.sqlfiddle.com/#!2/b3333/2

+1

Я не понимаю, что вы хотите. Что такое промежуточная таблица? Sales_stg? Тогда почему вы говорите, что в нем нет строк? – Mihai

+0

Каков ваш ожидаемый результат? –

+0

(неудивительно), что вы запрашиваете результат, точно результат, который я ожидаю от предоставленного набора данных – Strawberry

ответ

0

Чтобы найти противоречивую запись, вы можете использовать этот запрос, полученный от вашего

select sum(SL.sales_amt) as SALES_SUM, sum(ST.sales_WIP_amt) as SALES_STG_SUM, SL.sales_id, SL.location 
from sales SL INNER JOIN sales_stg ST 
ON SL.sales_id = ST.sales_id 
group by SL.sales_id, SL.location 
having SALES_SUM != SALES_STG_SUM 

Если это не что вы хотите, вы должны объяснить, что вы пытаетесь сделать более подробно.

+0

Почему значение 111.00 присутствует в поле SALES_STG_SUM? Это должно быть 0.00 правильно? – Athiruban

+0

Хорошо, я понял, что вы имеете в виду. Вы говорите о случае с 100 ЮГА. Когда вы группируете по нормальным полям db и пытаетесь сгруппировать stg-таблицы, этот sql дает неверные результаты. Лучше использовать 'выберите сумму (ST.sales_amt) в качестве SALES_SUM, ST.sales_id, ST.location из sales_stg ST группы по ST.sales_id, ST.location;' это даст вам правильный результат. –

+0

Спасибо @Sezin Karli В режиме реального времени есть вероятность, что несоответствие может произойти в более чем одном поле, например, поле местоположения, количество полей. Теперь я понял, когда использовать JOIN, SUB QUERY или их комбинацию. – Athiruban

0

ЕСЛИ вы хотите, чтобы просто строка просто использовала LEFT JOIN с несколькими условиями и проверяла наличие NULL во второй таблице.

select SL.sales_id,sales_amt, SL.location 
    from sales SL LEFT JOIN sales_stg ST 
    ON SL.sales_id = ST.sales_id AND sales_amt=sales_wip_amt 
    and SL.location=ST.location 
    where sales_wip_amt IS NULL 
+0

Все в порядке. Если строка в таблице продаж имеет долларовую сумму в размере 100 долларов США, и эта информация разбивается на несколько строк в другой таблице, например, на 50, 30 и 20 долларов США (только для sales_id). Поэтому я использовал функцию sum() в моем запросе. Есть ли способ исправить мой запрос выбора с добавлением логики для обработки нулевых строк. ???? – Athiruban

+0

@Athiruban Чем вы будете ПРИСОЕДИНИТЬСЯ в подзапросе с SUM ..GROUP BY для второй таблицы и проверить это. – Mihai

+1

Спасибо @Mihai :) Я узнал, что нехорошо использовать JOIN-оператор для этого сценария, и мы можем получить sales_id и место, в котором есть проблема. Я обновил скрипт sql http://www.sqlfiddle.com/#!2/36d6b/1 – Athiruban

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