2016-04-18 3 views
0

Мне нужно обновить столбец на основе результатов подзапроса. Если подзапрос возвращает результаты для этого столбца, тогда столбцы должны быть обновлены, запрос не возвращает никаких результатов для этого столбца, тогда мне нужно обновить 0.Обновить столбец в инструкции CASE с результатами postgres подзапроса

Я не знаю, где разместить подзапрос и как его объединить с оператором CASE. Это то, что я думал, но синтаксис неверен. Может ли кто-нибудь помочь, пожалуйста?

(SELECT datazones.ogc_fid, count(*) as total 
FROM suppliersnew suppliers, datazone_report_resupply datazones 
WHERE St_contains(datazones.geom, suppliers.geometry) AND (suppliers.status = 'Under construction' OR 
suppliers.status = 'Unknown' OR suppliers.status = 'Operational') GROUP by datazones.ogc_fid ORDER BY total ASC) sources 

UPDATE datazone_report_resupply 
SET es_actual = 
CASE 
    WHEN datazone_report_resupply.ogc_fid = sources.ogc_fid THEN sources.total 
    ELSE 0 
END 

ответ

0

Запрос немного трудно следовать, потому что агрегация на внешней колонка (это необычно). Однако вам не нужна агрегация или порядок. Кажется, вас беспокоит, существует ли строка.

Я думаю, что логика:

UPDATE datazone_report_resupply r 
SET es_actual = 
    (CASE WHEN EXISTS (SELECT 1 
         FROM suppliersnew s 
         WHERE St_contains(r.geom, s.geometry) AND 
          s.status IN ('Under construction', 'Unknown', 'Operational') 
        ) 
      THEN 1 ELSE 0 
     END); 
Смежные вопросы