2015-09-04 2 views
0

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

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 
+1

Не используется Teradata, но опасно предположить, что вы не можете назначить в CASE. Итак, в первом ТОЛЬКО у вас есть Flat = 0 ELSE .... Я бы удалил Flat = и просто получил THEN 0. – Andez

+0

Является ли 'flata' уже существующим столбец или тот, который вы хотите создать с помощью этого запроса? –

+1

Но разве это не изменит столбец Tax_or_Flat? То, что я пытаюсь сделать (не обязательно с аргументом case), это если столбец Tax_or_flat = 'tax', то clange текущее значение в столбце Flat to zero. Есть лучший способ сделать это? – Matt

ответ

1
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, но это основная идея того, что вы пытаетесь сделать.

** EDIT **

Если это просто 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 
+0

Спасибо, поэтому я должен сделать это в таблице сохранения или могу добавить его в существующий код? Как и прямо перед заявлением – Matt

+1

Это заявление само по себе будет работать. Если вы пытаетесь сделать его частью более крупного кода, вам может потребоваться опубликовать немного больше вашего кода в вашем вопросе, чтобы получить точный ответ. –

+0

Благодарим за помощь. Так много. Я обновил код, чтобы показать все. Я пытаюсь добавить его после столбцов Flat и Tax, как установлено – Matt

0

Основываясь на ваш выбор вы, кажется, хочет что-то вроде этого:

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 
+0

Это создает новый столбец правильно? Я пытаюсь обновить и использовать ciolumn – Matt

+0

@Matt: вам нужно быть более конкретным, что вы на самом деле хотите, ваше описание плюс запрос немного запутанно. В вашем SELECT нет столбца с именем 'flata', вместо этого вы имели в виду' flat'? – dnoeth

Смежные вопросы