sql对2列值求和并按3列对记录进行排序

时间:2020-07-23 00:48:19

标签: sql select lead

我有列-ip,端口,线对,pair_status,长度,length_to_fault,add_date。 我需要按端口对所有内容进行排序,并且每个端口至少有一对(A,B,C,D)。当它排序时,我需要排序甚至更多-我需要在确切的端口中对每对进行排序。

目前,我可以选择要执行的所有操作,但只需要一定的长度。

我想更改此片段,以便可以检查-如果length = N / A,则需要length_to_fault,如果length_to_fault = N / A,则需要长度。我的想法只是将这两列合并为1。每条记录仅在一个列上具有值(可以是length或length_to_fault)。到目前为止,我有这个

Select d.*
from (select d.*, lead(length::float) over (partition by port_nbr, pair order by d.add_date) as next_length
      from diags d
      where length !='N/A'
     ) d

这很好用,但是有些记录的长度为N / A,但是值在length_to_fault内,因此该选择不接收该记录。有没有办法编辑此片段以包括length_to_fault?也许我可以将这两列汇总为一?而且length / length_to_fault是数据库中的字符,因此在此选择中我必须将其更改为float。

1 个答案:

答案 0 :(得分:0)

您可以使用case表达式:

Select d.*
from (select d.*,
             lead( (case when length <> 'N/A' then length else length_to_fault end)::float) over (partition by port_nbr, pair order by d.add_date) as next_length
      from diags d    
     ) d