2015-11-03 3 views
0

Привет Я использую этот запрос для вычитания значений из таблицы с использованием данных из одной таблицы с разными параметрами, но я получаю повторяющиеся значения. Может ли кто-нибудь увидеть, что здесь не так?Получение повторяющихся значений с отличием

SELECT DISTINCT O.BMF_VOTE BMF_VOTE, 
     O.BMF_OPERATING_AGENCY BMF_OPERATING_AGENCY, 
     O.BGT_ACTUAL_EXPEND - S.BGT_ACTUAL_EXPEND , 
     O.BGT_PREV_ESTIMATE - S.BGT_PREV_ESTIMATE , 
     O.BGT_EST_YEAR1 - S.BGT_EST_YEAR1 , 
     O.BGT_EST_YEAR2 - S.BGT_EST_YEAR2 , 
     O.BGT_EST_YEAR3 - S.BGT_EST_YEAR3 
    FROM BGT_MOF_FROM O, BGT_MOF_FROM S 
WHERE (O.BMF_MAINDIVISION = '100' AND O.BMF_SUBDIVISION = '300') 
     AND (S.BMF_SUBDIVISION = '220' AND S.BMF_MAINDIVISION = '100') 
+2

предоставлять данные выборки. –

ответ

0

На столах нет ни одного соединения; возможно, там, откуда пришли обманы. Четкий способ сказать, что вы хотите, будет с субом выбирает (псевдонимы, как O и S ниже), вступил в BMF_VOTE и BMF_OPERATING_AGENCY:

SELECT 
    O.BMF_VOTE, O.BMF_OPERATING_AGENCY, 
    O.BGT_ACTUAL_EXPEND - S.BGT_ACTUAL_EXPEND , 
    O.BGT_PREV_ESTIMATE - S.BGT_PREV_ESTIMATE , 
    O.BGT_EST_YEAR1 - S.BGT_EST_YEAR1 , 
    O.BGT_EST_YEAR2 - S.BGT_EST_YEAR2 , 
    O.BGT_EST_YEAR3 - S.BGT_EST_YEAR3 
FROM 
    (
    SELECT * FROM BGT_MOF_FROM 
    WHERE BMF_MAINDIVISION = '100' AND 
     BMF_SUBDIVISION = '300' 
    ) O 
    JOIN 
    (SELECT * FROM BGT_MOF_FROM 
    WHERE BMF_SUBDIVISION = '220' AND 
     BMF_MAINDIVISION = '100' 
    ) S 
    on 
    O.BMF_VOTE = S.BMF_VOTE and 
    O.BMF_OPERATING_AGENCY = S.BMF_OPERATING_AGENCY 

фиксируя код:

SELECT DISTINCT O.BMF_VOTE BMF_VOTE, 
    O.BMF_OPERATING_AGENCY BMF_OPERATING_AGENCY, 
    O.BGT_ACTUAL_EXPEND - S.BGT_ACTUAL_EXPEND , 
    O.BGT_PREV_ESTIMATE - S.BGT_PREV_ESTIMATE , 
    O.BGT_EST_YEAR1 - S.BGT_EST_YEAR1 , 
    O.BGT_EST_YEAR2 - S.BGT_EST_YEAR2 , 
    O.BGT_EST_YEAR3 - S.BGT_EST_YEAR3 
FROM BGT_MOF_FROM O, BGT_MOF_FROM S 
WHERE 
    (O.BMF_VOTE = S.BMF_VOTE and O.BMF_OPERATING_AGENCY = S.BMF_OPERATING_AGENCY) 
    AND 
    (O.BMF_MAINDIVISION = '100' AND O.BMF_SUBDIVISION = '300') 
    AND 
    (S.BMF_SUBDIVISION = '220' AND S.BMF_MAINDIVISION = '100') 
+0

Я добавлю исправление к вашему коду. – gadaju

+0

Я нашел решение от Ed Baker без присоединений, но хотел протестировать ваш, чтобы узнать, но когда я его запускаю, я получаю недостающую ошибку ключевого слова. – Maldayne

+0

wait i this i see Я не исправил одну часть, попробую еще раз. – Maldayne

0

Он смотрит на меня, как вы пропустили какие-либо положения для присоединения двух таблиц, не зная, данные, которые он должен выглядеть примерно так:

FROM BGT_MOF_FROM O, BGT_MOF_FROM S 
WHERE O.key = S.key 

Очевидно заменить ключ с действительным именем столбца , Если вы пытаетесь сделать полукартезийский продукт (медленный и плохой), вы должны перенести запрос в подзапрос, а затем запустить над ним надпись.

+0

Мне так глупо сейчас не замечаю этого. Я чувствовал, что пропала уникальность, и я не мог понять, что. БЛАГОДАРЯ! – Maldayne

+0

Нет проблем, я полностью понимаю! –

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