我正在查询以下数据:
我想要的是按级别获取数据。 也就是说,如果“用户”列不为NULL,我希望返回您的业务+类型+类组合。
反过来,如果“用户”列为NULL,我希望从“代理商”列中获得“业务+类型+类别”组合。
最后,如果“用户”列和“机构”列为NULL,我想从“国家”列返回组合。
预期输出为绿线:
有人可以帮助我吗? 谢谢!
答案 0 :(得分:1)
这似乎是优先级查询。用户不为null的所有行,另外每sshagent(['1c0972a6-2bbf-4144-XXXX-XXXXXXXXXXXX']) {...}
加一行。一种方法是null
:
row_number()
select t.*
from (select t.*,
row_number() over (partition by business, type, agency order by userid desc) as seqnum
from t
) t
where seqnum = 1 or user is not null;
将空值放在序列的最后,因此它们被desc
过滤掉。
另一种方法使用where
和union all
:
not exists
如果您的结果是查询的结果,则第一个版本很方便,因为查询结果仅被引用(并因此被计算)一次。