我有一个看起来像这样的数据集:
id No_trans Bank
1 2 VISA
1 1 PAYPAL
2 3 MASTERCARD
3 1 MASTERCARD
3 4 PAYPAL
4 1 PAYPAL
我需要做的是,例如,id
有PAYPAL
,将其更改为另一家银行。
对于id
= 1,PAYPAL
应该像VISA
,但是对于id
= 3,它应该是MASTERCARD
,但是对于id
= 4,应该为PAYPAL
,因为它没有其他Bank
记录。
select id ,count(No_trans) ,
case Bank when PAYPAL then VISA
when PAYPAL then MASTERCARD
else
PAYPAL
end as bank
from table
按1和3分组
无法使用,因为我需要根据具有相同id
库的其他记录进行更改。
如果此ID的银行与PAYPAL
不同,则将其用于具有相同ID的其他记录,否则请按原样使用它。
create temporary table t1
(
ID INT
, no_trans int
, bank varchar (255)
);
INSERT INTO t1 values
(1, 2 , 'VISA'),
(1 , 1 , 'PAYPAL'),
(2, 3 , 'MASTERCARD'),
(3 , 1 , 'MASTERCARD'),
(3, 4 , 'PAYPAL'),
(4 , 1 , 'PAYPAL');
select * from t1
where id = 1
返回
'1','2','VISA'
'1','1','PAYPAL'
我需要
'1','2','VISA'
'1','1','VISA'
为
从t1选择* 其中id = 3 应该是
ID, no_trans, bank
3, 1, MASTERCARD
3, 4, MASTERCARD
为
从t1选择* id = 4
ID, no_trans, bank
4, 1, PAYPAL
答案 0 :(得分:1)
尝试以下操作:
select
ID,
no_trans,
If (id = 1 and bank = 'PAYPAL', 'VISA',bank)as bank
from t1
where id = 1
对于ID = 3
select
ID,
no_trans,
If (id = 3 and bank = 'PAYPAL', 'MATERCARD',bank) as bank
from t1
where id = 3;
如果您需要将它们全部组合在一起:
select
ID,
no_trans,
If (bank = 'PAYPAL',If(id = 1,'VISA',If(id=3,'MASTERCARD',bank)),bank) as bank
from t1;
答案 1 :(得分:1)
您可以使用聚合:
select id,
coalesce(max(case when Bank <> 'PayPal' then Bank end),
max(Bank)
)
from t
group by id;
如果您想要原始行,那么子查询可能会更简单:
select t.*,
(select t2.bank
from t t2
where t2.id = t.id
order by (t2.bank <> 'PayPal) desc
limit 1
) as new_bank
from t;