Если затем заявление изменить существующий столбец
Как я могу это сделать. Я попробовал заявление случая, но у меня есть проблемы с получением его работы
if Tax_or_Flat = 'tax' then flat = 0
Tax_or_Flat
это заголовок столбцаflata
это заголовок столбца
может быть
,CASE WHEN Tax_or_Flat = 'tax' THEN Flata = 0 ELSE Tax_or_Flat END
но это не работает
select
a.time_amt as Amt_Day
,a.rate_mix as AVG_Day_Rate
,a.psbdats as Poss_Days_Bil_Ins
,a.acct as Bill_to_Amount
,a.LGCY_AUTH_AMT_TXT as Auth_Amt
,case when Auth_Amt LIKE '%TAX%' then 'tax'
when Auth_Amt LIKE '%DAY%' then 'flat'
else 0
end as Tax_or_Flat
,((Amt_Day - AVG_Day_Rate ) * Poss_Days_Bil_Ins) as Tax
,((Amt_Day * Poss_Days_Bil_Ins) - Bill_to_Amount) aS Flat
from JTable.Loan a
where a.rate_mix = 5
2 ответа
UPDATE table_name
SET flata = CASE WHEN Tax_or_Flat = 'tax' THEN 0 ELSE Tax_or_Flat END
Это изменит значение flata
в 0
когда Tax_or_Flat = 'tax', и это даст ему значение в столбце Tax_or_Flat во всех других случаях.
Проверьте синтаксис для Teradata, но это основная идея того, что вы пытаетесь.
** РЕДАКТИРОВАТЬ **
Если это просто SELECT
что вы пытаетесь выполнить, а не изменять какие-либо фактические данные таблицы, вы можете сделать вложенный подзапрос:
select *,case when Tax_or_Flat = 'tax' THEN 0 ELSE Tax_or_Flat END as flata
from (
select
a.time_amt as Amt_Day
,a.rate_mix as AVG_Day_Rate
,a.psbdats as Poss_Days_Bil_Ins
,a.acct as Bill_to_Amount
,a.LGCY_AUTH_AMT_TXT as Auth_Amt
,case when Auth_Amt LIKE '%TAX%' then 'tax'
when Auth_Amt LIKE '%DAY%' then 'flat'
else 0
end as Tax_or_Flat
,((Amt_Day - AVG_Day_Rate ) * Poss_Days_Bil_Ins) as Tax
,((Amt_Day * Poss_Days_Bil_Ins) - Bill_to_Amount) aS Flat
from JTable.Loan a
where a.rate_mix = 5
) a
или переписать логику в запросе:
select
a.time_amt as Amt_Day
,a.rate_mix as AVG_Day_Rate
,a.psbdats as Poss_Days_Bil_Ins
,a.acct as Bill_to_Amount
,a.LGCY_AUTH_AMT_TXT as Auth_Amt
,case when Auth_Amt LIKE '%TAX%' then 'tax'
when Auth_Amt LIKE '%DAY%' then 'flat'
else 0
end as Tax_or_Flat
,((Amt_Day - AVG_Day_Rate ) * Poss_Days_Bil_Ins) as Tax
,((Amt_Day * Poss_Days_Bil_Ins) - Bill_to_Amount) aS Flat
,case when (case when Auth_Amt LIKE '%TAX%' then 'tax'
when Auth_Amt LIKE '%DAY%' then 'flat'
else 0 end) = 'tax'
then 0
else (case when Auth_Amt LIKE 'TAX%'
then 'tax'
when Auth_Amt LIKE '%DAY%'
then 'flat'
else 0
end)
end AS flata
from JTable.Loan a
where a.rate_mix = 5
Основываясь на вашем SELECT, вы, кажется, хотите что-то вроде этого:
select
a.time_amt as Amt_Day
,a.rate_mix as AVG_Day_Rate
,a.psbdats as Poss_Days_Bil_Ins
,a.acct as Bill_to_Amount
,a.LGCY_AUTH_AMT_TXT as Auth_Amt
,case when Auth_Amt LIKE '%TAX%' then 'tax'
when Auth_Amt LIKE '%DAY%' then 'flat'
else '0'
end as Tax_or_Flat
,case when Tax_or_Flat = 'tax'
then ((Amt_Day - AVG_Day_Rate ) * Poss_Days_Bil_Ins)
else 0
end as Tax
,case when Tax_or_Flat = 'flat'
THEN ((Amt_Day * Poss_Days_Bil_Ins) - Bill_to_Amount)
else 0
end AS Flat
from JTable.Loan a
where a.rate_mix = 5