2013-02-28 2 views
0

Учитывая таблицу, как показано ниже. Я хочу переместить и добавить все значения из столбца escrow1 в balance1 соответствующего uid. И мануфактура для escrow2 для баланса2. Так в приведенном ниже случае. Строка с uid 4 будет иметь баланс 1858000 + 42000, строка с uid 3 будет иметь баланс1 = 1859265 + 30735 и escrow1 = 0, а строка с uid 2 будет иметь баланс 2 = 940050 + 1050000 и escrow2 = 0. Все иначе то же самое. Можно ли сделать это в одном запросе? Я пытался изо всех сил, но я не могу придумать решение, поэтому мне, возможно, придется делать это в функции и зацикливать все строки, но я бы предпочел не делать этого. Также я знаю, что только небольшое количество строк будет иметь значения escrow, не равные 0. Учитывая это, есть ли способ оптимизировать запрос?Как добавить один столбец в другой столбец во всех строках таблицы?

uid | balance1 | escrow1 | balance2 | escrow2 
-----+----------+---------+----------+--------- 
    1 |  5000 |  0 |  0 |  0 
    9 |  5000 |  0 |  0 |  0 
    6 | 1900000 |  0 | 1899960 |  0 
    5 | 1900000 |  0 | 1900000 |  0 
    7 | 1900000 |  0 | 1900000 |  0 
    8 | 1900000 |  0 | 1900000 |  0 
    4 | 1858000 | 42000 | 1900014 |  0 
    2 | 1910000 |  0 | 940050 | 1050000 
    3 | 1859265 | 30735 | 1895050 |  0 

ответ

3

Если вы хотите просто выбрать данные из таблицы, используйте запрос, предоставленный Грегом. Если вы хотите обновить таблицу, это может помочь нижеприведенный запрос.

Update TABLENAME 
    Set Balance1 = Balance1 + Escrow1, 
     Balance2 = Balance2 + Escrow2, 
     Escrow1 = 0, Escrow2 = 0 

Надеюсь, это поможет.

0

Я думаю, что это так просто, как:

SELECT uid 
     ,Balance1 + Escrow1 AS Balance1 
     ,Balance2 + Escrow2 AS Balance2 
FROM TableName 

С точки зрения optomising, я не сделал много с Postgre, но я сомневаюсь, что вы должны были бы делать какие-либо оптимизацию (предполагая, что у вас есть правильный первичный ключ и т. д.)

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