【问题标题】:SQL Rank column based on condition基于条件的 SQL Rank 列
【发布时间】:2017-08-30 19:28:09
【问题描述】:

我应该从表数据中得出 Rank 列。 目的是根据以下条件选择独特的邓恩:

  1. Max(ConfidenceCode)
  2. 如果 Confindencde 相同,如果 DeliveryAddressSeq=0 只有一行,请选择该行
  3. 如果 Confindencde 相同,如果 DeliveryAddressSeq=0 有很多行,则选择 CustomerCode 的最小值

所以,最后我需要 Rank=1 数据作为所需的输出

【问题讨论】:

  • 阅读如何从这里申请排名blog.sqlauthority.com/2011/08/12/…
  • 如果 Confindencde 相同且 DeliveryAddressSeq != 0 怎么办?
  • 我知道如何申请Rank,但这不是海峡前进。
  • 嗨 Jon,DeliveryAddreessSeq=0 是一个或多个。
  • 您能否提供一个非图像数据示例?另外,我不明白你最后的评论:乔恩。例如,您有未指定排名的行。这些应该如何排名?即 DUNS 1003,客户代码 506。

标签: sql sql-server tsql select


【解决方案1】:

rank 窗口函数应该可以解决问题:

SELECT Duns, ConfidenceCode, DeliveryAddressSeq, CustomerCode
FROM   (SELECT Duns, ConfidenceCode, DeliveryAddressSeq, CustomerCode,
               RANK() OVER (PARTITION BY duns
                            ORDER BY ConfidenceCode ASC,
                                     CASE DeliveryAddressSeq WHEN 0 THEN 0 
                                                             ELSE 1 
                                     END ASC,
                                     CustomerCode DESC) AS rk
        FROM   mytable)
WHERE  rk = 1

【讨论】:

  • Mureinik,你真是个了不起的人 :-) 我想知道如何在同等条件下排名。案例陈述完成了我正在寻找的技巧
【解决方案2】:

由于您只想获得排名 1,因此您正在寻找客户代码 501、504、507

SELECT duns, 
       confidencecode, 
       deliveryaddressseq, 
       customercode,
       [rank]
  FROM (SELECT *,
               RANK() OVER (PARTITION BY duns
                                ORDER BY confidencecode DESC,
                                         deliveryaddressseq,
                                         customercode) AS [rank]
          FROM   t_duns) tt
 WHERE [rank] = 1

结果

duns    confidencecode  deliveryaddressseq  customercode    rank
1001    10              1                   501             1
1002    10              0                   504             1
1003    10              0                   507             1

【讨论】:

    猜你喜欢
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多