Если затем заявление изменить существующий столбец

Как я могу это сделать. Я попробовал заявление случая, но у меня есть проблемы с получением его работы

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
Другие вопросы по тегам