【发布时间】:2017-02-28 23:48:47
【问题描述】:
我正在尝试查询以下数据集:
示例输入:
create table t(sn varchar(100),easyrfqy varchar(10),ecaty int,ps varchar(10))
insert into t values('abc','NO',0,'E'),('abc','YES',1,'N'),('abc','NO',0,'W'),
('def','NO',1,'E'),('def','NO',0,'X'),('xyz','NO',1,'X')
预期结果:
sn easyrfqy_update ecaty_update ps
abc YES 1 Pref
abc YES 1 Pref
abc YES 1 Pref
def NO 1 Pref
def NO 1 Pref
xyz NO 1 NP
基于逻辑:对于特定的 sn 如果 easyrfqy ='P' or 'E' or 'N' then Pref 对于特定的sn,如果它有一个ecaty 1,则为该sn的所有行设置1 对于特定的 sn,如果它有 easyrfqy 'YES' 然后将所有行设置为 YES
我试过这个:
select * from
(
select *,row_number()over(partition by sn order by ecat desc) as rn from t
)x where x.rn=1
这里是 SQl 小提琴:http://www.sqlfiddle.com/#!6/e104d/1
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
嘿,戈登,我已经发布了 :) ty
-
easyrfqy 根据样本数据的值为 NO 和 YES。所以(如果 easyrfqy ='P' or 'E' or 'N')比较是不可能的。请澄清。
-
基于逻辑:对于特定的 sn 如果
ps='P' 或 'E' 或 'N' 然后 Pref 用于特定的 sn 如果它有一个 ecaty 1 然后为所有行设置 1如果它具有easyrfqy 'YES',则特定sn的该sn将所有行设置为YES