2016-07-14 2 views
0

Я написал инструкцию SQL в Access, которая ищет строки данных с тем же значением в своем столбце «Код», а затем просматривает эти строки с тем же значением «Код» и находит строки с напротив значений столбца «Деньги Amt» (например, одна строка будет иметь значение 200, а другая - -200), строка с помеченными столбцами затем заполняется цифрой «999», когда пары этих противоположных значений с тем же кодом будут найдены ,SQL in Access, проблема с подзапросом

Проблема в том, что некоторые из моих строк спариваются в нечетных нумерованных группах, а не парами 2. Я хочу, чтобы было соотношение 1: 1 для противоположных значений, чтобы они по существу отрицали друг друга.

Вот код, который я использовал для получения результата.

UPDATE [Actual Debt] 
SET LineItem = 999 
WHERE EXISTS 
    (SELECT * FROM [Actual Debt] as ad2 
    WHERE ad2.Code = [Actual Debt].Code 
    AND ad2.[Money Amt] = - [Actual Debt].[Money Amt]); 

enter image description here

На картинке вы можете видеть, что в первые 4 строки кода заселенных 2 пары противоположных значений «Деньги АМТ», как предполагалось. Но в нижних 3 строках должна быть только одна пара «999», но вместо этого она заполняет нечетное количество строк.

Как получить подзапрос, чтобы заполнить поле «Линия» только для противоположных пар.

Image from before I put in the current code

Спасибо заранее.

+0

Я думаю, вы должны показать перед собой таблицу. 3 строки на нижней части делают pefect смысл, предполагая наличие двух записей с '+ 0.9' и одной записью с' -0.9'. –

+0

Если у вас есть дубликаты, это будет очень сложно сделать в запросе MS Access. Я могу предположить, что вы просто делаете это в приложении. Другие базы данных имеют функциональность, которая делает это возможным в одном запросе. –

+0

Я добавил ранее. Есть ли способ написать код, чтобы он мог делать только пары из 2? – Mccormack

ответ

0

Теперь Гордон Я действительно верю, что это можно сделать в MS Access. Вы можете сделать почти все, что есть в Access, что вы можете сделать в другой базе данных, а просто выяснить, как это сделать. Однако в этом конкретном случае, по-видимому, существует проблема с базовыми данными, которые вызывают текущую проблему, и, не видя всей исходной таблицы, очень сложно определить, что это за ошибка. Тем не менее, я бы рискнул предположить, что если вы запустили свой суб-запрос самостоятельно (как показано ниже), вы получите данные, как я покажу ниже. Попробуйте запустить только часть SELECT вашего запроса и посмотреть, что вы получаете.

SELECT * 
    FROM ActualDebt AS Ad2 

WHERE Ad2.Code = ActualDebt.Code 
    AND Ad2.MoneyAmt = ((-1) * ActualDebt.MoneyAmt); 

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

Code | MoneyAmt 
MHT  .3 
MHT  .3 
MHT  -.3 
MHT  -.3 
RLO  .4 
RLO  .6 
MQR  .9 
MQR  -.9 
MQR  .9 

Так Гордон, если то, что я описал выше, это вопрос, то да вам нужно будет предоставить более подробную информацию, чтобы определить решение, потому что программно прямо сейчас не было возможности провести различие между первым MQR .9 и другим MQR .9 - который, кажется, является источником выпуска

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

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