Выбор данных / Выбор строки - PullRequest
0 голосов
/ 28 мая 2020

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

как добиться результата

enter image description here

я хочу преобразовать все неотрицательные числа в ноль для определенной даты. В данном случае 2021.

enter image description here

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Похоже, вы ищете условный sum. Logi c должен поместить выражение case в агрегатную функцию, например:

select
    sum(case when "2020" < 0 then "2020" else 0 end)  result_2020,
    sum(case when "2021" < 0 then "2021" else 0 end)  result_2021
from mytable

Довольно необычно иметь столбцы с именами, состоящими из цифр, такими как 2020, поэтому я Интересно, является ли то, что вы показываете, фактическими данными выборки или результатами промежуточного запроса (в этом случае возможны дальнейшие оптимизации).


Изменить

Вышеупомянутый ответ отвечает на исходную версию вопроса. Это отвечает на отредактированный вопрос:

Вы можете использовать выражение case, чтобы преобразовать положительные числа для даты 2021 в 0:

select 
    fab, 
    date, 
    case when output > 0 and date = 2021
         then 0
         else output
    end output
from mytbale
0 голосов
/ 28 мая 2020

Скажем, если у вас есть таблица, как показано ниже

enter image description here

Я думаю, вы ищете что-то вроде этого

SELECT id,
    year,
    (case when (a>0 and year = 2021) then 0 else a end) as a_filtered,
    (case when (b>0 and year = 2021) then 0 else b end) as b_filtered 
FROM `table_name` 
WHERE 1

Вывод будет следующим.

enter image description here

...