繁体   English   中英

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

[英]sql sum 2 column values and sort records by 3 columns

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

目前我有 select 可以做我需要的一切,但只是长度。

我想更改这个片段,以便它可以检查 - 如果长度 = N/A,那么它需要 length_to_fault,如果 length_to_fault = N/A,那么它需要长度。 我的想法是将这 2 列合并为 1。此外,每条记录仅在一列上具有值(它可以是长度或 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 之内,所以这个 select 不会记录该记录。 有没有办法编辑这个片段以包含 length_to_fault 呢? 也许我可以将这两列合二为一? 此外,length/length_to_fault 是数据库中的字符,因此我必须将其更改为在此 select 中浮动。

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM