2016-06-27 3 views
0

dollar_amountの値を既存の値で置き換えようとしています。期間= 201605でstatus = 'Open'、期間= 201605でstatus = 'Active'と指定すると、dollar_amountを10に置き換えます。以下のSQLクエリからcase文に1列(status)を2回使用できますか? ?ここでハイブ:1列が2回使用された場合

はサンプルデータです:

create table atable1 (
    id int, 
    status string, 
    period int, 
    dollar_amount decimal(18,2)); 


insert into atable1 values (1234, "Open", "201604", 0); 
insert into atable1 values (1234, "Active", "201605", 9.99); 
insert into atable1 values (2222, "Open", "201604", 0); 
insert into atable1 values (2222, "Active", "201605", 9.99); 

生データは次のようになります。

以下
id  status period dollar_amount 
1234 Open 201604 0 
1234 Active 201605 10 
2222 Open 201604 0 
2222 Active 201605 10 

:変更後

id status period dollar_amount 
1234 Open 201604 0 
1234 Active 201605 9.99 
2222 Open 201604 0 
2222 Active 201605 9.99 

、私はデータが見えるようにしたいです私が試したクエリです:

select 
id, 
status, 
period, 
case when 
    (status = 'Open' and period = 201604) 
    and (status = 'Active' and period = 201605) 
then 10 
else dollar_amount 
end dollar_amount_value 

答えて

1

あなたの質問は終了しました。しかし、あなたが

case when status = 'Open' and period = 201604 then 10 
    when status = 'Active' and period = 201605 then 10 
else dollar_amount 
end 

case式でwhen条件を変更する必要があるあなたが持っている表現の問題は、あなたが常に失敗1行、上の地位及び期間の二つの値をチェックしている、ということです。したがって、それらを別々のwhen条件に分割する必要があります。

+0

ありがとうございます! status = 'Open'とperiod = 201604の場合、0 の場合はstatus = 'Improving'、期間= 201605、次に10に変更する必要がありました – sharp

関連する問題