SQL: случай, когда не работает - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь вернуть либо «Увеличенную корректировку», либо «Уменьшенную корректировку» в зависимости от того, является ли значение в столбце «сумма» положительным или отрицательным.

CASE amount
when amount > 0 then "Increase Adjustment"
when amount < 0 then "Decreased Adjustment"
else "ERROR"
end as 
transaction_type

Любая рекомендация будет принята с благодарностью..

Редактировать: Весь выбор =:

select
tx_date,
bank_account,
description,
amount,
currency,
CASE bank_account
when 'CAD-FTX' then 'Suspense_CAD'
when 'USD-PRO' then 'Suspense_USD'
when 'CAD-PRO' then 'Suspense_CAD'
when 'USD-ALL' then 'Suspense_USD'
when 'TD-USA' then 'Suspense_USD'
end
suspense_account,
CASE amount
when cast(amount as float) > 0 then "Increase Adjustment"
when cast(amount as float) < 0 then "Decreased Adjustment"
end 
transaction_type
from [sys_tx_combined]

Ответы [ 5 ]

0 голосов
/ 26 мая 2018

Вот более простой способ написания ваших выражений:

select tx_date, bank_account, description, amount, currency,
       (case when bank_account in ('CAD-FTX', 'CAD-PRO')
             then 'Suspense_CAD'
             when bank_account in ('USD-PRO', 'USD-ALL', 'TD-USA')
             then 'Suspense_USD'
         end) suspense_account,
       (case when amount > 0 then 'Increase Adjustment'
             when amount < 0 then 'Decreased Adjustment'
        end) as transaction_type
from [sys_tx_combined];

Примечания:

  • При работе с case выражениями для такого отображения я предпочитаю иметь одно условиедля каждого выходного условия, а не одного условия для каждого ввода.
  • cast(amount as float) почти наверняка не требуется, поэтому я удалил его.
  • Используйте одиночные кавычки для строковых констант, даже если вашбаза данных поддерживает двойные кавычки (их следует использовать для других целей).
0 голосов
/ 25 мая 2018
select tx_date, bank_account, description, amount, currency, 
CASE 
    when bank_account ='CAD-FTX' then 'Suspense_CAD' 
    when bank_account = 'USD-PRO' then 'Suspense_USD' 
    when bank_account = 'CAD-PRO' then 'Suspense_CAD' 
    when bank_account = 'USD-ALL' then 'Suspense_USD' 
    when bank_account = 'TD-USA' then 'Suspense_USD' 
end suspense_account, 
CASE 
    when cast(amount as float) > 0 then 'Increase Adjustment' 
    when cast(amount as float) < 0 then 'Decreased Adjustment' 
end 
transaction_type 
from [sys_tx_combined]
0 голосов
/ 25 мая 2018

Поскольку вы начинаете свой оператор с

CASE amount

Вы указываете простое выражение CASE для суммы, то есть предложения WHEN могут быть только проверками на равенство.Попробуйте найти выражение:

CASE
when amount > 0 then "Increase Adjustment"
when amount < 0 then "Decreased Adjustment"
else "ERROR"
end as 
transaction_type

Дополнительная информация: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql?view=sql-server-2017

0 голосов
/ 25 мая 2018
CASE
when amount > '0' then "Increased Adjustment"
when amount < '0' then "Decreased Adjustment"
else "ERROR"
end as 
transaction_type
0 голосов
/ 25 мая 2018

Как насчет:

CASE
when amount > 0 then "Increase Adjustment"
when amount < 0 then "Decreased Adjustment"
else "ERROR"
end as 
transaction_type
...