【问题标题】:Bringing back a List based on Priority根据优先级恢复列表
【发布时间】:2015-05-04 01:25:32
【问题描述】:

我必须检查是否为一个可能有多个客户与该帐户相关的帐户显示了一个客户 ID。我必须根据以下优先级仅显示一个客户 ID。

  1. 如果客户名称 - a.. 那么 1
  2. 如果客户名称 - b.. 那么 2
  3. 如果客户名称 - c.. 那么 3

    Case customerid
    when customer name like 'a%' then customer_id1
    when customer name like 'b%' then customer_id2
    when customer name like 'c%' then customer_id3
    else customer_id4
    end
    

不知道怎么写select语句,只显示最高优先级的id

Sample Data
    CustomerName CustomerID AccountID
    Arthur       123        acc1
    Bruce        456        acc1
    Billy        812        acc2
    Camilla      768        acc3
    Dominic      891        acc2

Expected Output
    AccountID CustomerID
    acc1      123
    acc2      812
    acc3      768

【问题讨论】:

  • 请提供样本数据和预期输出。

标签: sql arrays sorting


【解决方案1】:

选择客户 ID、帐户 ID 从 (选择客户名称、帐户 ID、 RANK() OVER(GROUP BY ACCOUNTID ORDER BY CASE CUSTOMERNAME like 'a%' then 1 WHEN CUSTOMERNAME like 'a%' then 2 WHEN CUSTOMERNAME like 'a%' 然后 3 否则 4) RNK 来自表 1) RNK = 1

【讨论】:

    【解决方案2】:

    我不知道我是否理解你的问题。

    但是根据你的例子,你可以试试这个:

    SELECT AccountID, min(CustomerID)
    FROM SampleData
    GROUP BY AccountID
    

    【讨论】:

    • 感谢您的回复,但我想要的客户 ID 不应该是最低的,而是按照客户姓名按优先级排序。即如果客户名称以a开头,则采用该客户ID,否则采用以b开头的客户名称的ID。
    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2014-08-05
    • 2021-06-26
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多