SQL-按级别选择,或者为null时为父级

时间:2019-10-21 15:36:46

标签: sql sql-server

我正在查询以下数据:

enter image description here

我想要的是按级别获取数据。 也就是说,如果“用户”列不为NULL,我希望返回您的业务+类型+类组合。

反过来,如果“用户”列为NULL,我希望从“代理商”列中获得“业务+类型+类别”组合。

最后,如果“用户”列和“机构”列为NULL,我想从“国家”列返回组合。

预期输出为绿线:

enter image description here

有人可以帮助我吗? 谢谢!

1 个答案:

答案 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过滤掉。

另一种方法使用whereunion all

not exists

如果您的结果是查询的结果,则第一个版本很方便,因为查询结果仅被引用(并因此被计算)一次。