2012-05-16 6 views
0

Хорошо, я просмотрел некоторые вопросы по обновлению с помощью группы и нашел, что sql не делает этого, но я не могу понять, как выполнить обновление по этому конкретному запросу.Обновление SQL с группировкой

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

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

У кого-нибудь есть идеи?

Благодаря

+0

какой двигатель db вы используете? edit: ups, не может помочь;) – Sebas

+0

Извините, его MS SQL 2008 R2 – user744284

+2

. Если вы предоставите некоторые определения таблиц и образцы данных, вы с большей вероятностью получите ответ. Это не должно быть полным, на самом деле лучше, если вы разместите некоторый высококонцентрированный код сокращения. Кроме того, полезно, если вы сообщите нам, какой вкус базы данных (включая версию), не все SQL-решения подходят для каждой базы данных. – APC

ответ

0

Вы можете сохранить свои результаты во временной таблице (CREATE TABLE в ВРЕМЕННОЙ MySQL), а затем использовать его для фильтрации обновления.

SELECT id, name, firstname INTO #tmp FROM stuff; 
UPDATE other SET count='new value' WHERE id IN (SELECT id FROM #tmp); 

Синтаксис может быть неправильно, так как я не использую MSSQL

0

Если я вас правильно понимаю, вы можете определить пользователей обновить с помощью запроса на выборку, а затем просто обновить их. Я думаю, что следующий запрос делает то, что вы намереваетесь:

with toupdate as (select userid 
        from (select userid, sum(value) as sumvalue 
         from cashbook cb 
         group by userid 
         ) join 
         bankstatement bs 
         on cb.userid = bs.userid 
        where cb.sumvalue = bs.value 
       ) 
update cashbook 
    set reconciled = 1 
from toupdate 
where cashbook.userid = toupdaqte.userid 
Смежные вопросы