SQL 中数据的优先级

问题描述 投票:0回答:1

我需要在Key上加入以下2个表。在决赛桌中,我需要 contact1 中的 Rank1 数据,如果 Rank1 不存在,我需要检查下一个 Rank。如果 Rank1 数据到达 contact1,那么我不应该考虑 contact2 和 contact3 的 Rank1。有没有办法用sql来做?

表A:

钥匙1
1234
3456

表B

钥匙2 排名 联系方式
1234 1 楼主
1234 2 共同拥有者
1234 3 首席执行官
3456 2 共同拥有者
3456 3 首席执行官

决赛桌:

联系方式1 联系方式2 联系3
1234 楼主 共同拥有者 首席执行官
3456 共同拥有者 首席执行官
sql join pivot
1个回答
0
投票

您可以结合使用 ROW_NUMBER() 函数和条件聚合来实现所需的结果。这是一个可以实现您目标的 SQL 查询:

WITH RankedContacts AS (
    SELECT 
        Key2 AS [Key],
        Contact,
        ROW_NUMBER() OVER (PARTITION BY Key2 ORDER BY Rank) AS RowNum
    FROM 
        TableB
)
SELECT 
    [Key],
    MAX(CASE WHEN RowNum = 1 THEN Contact END) AS contact1,
    MAX(CASE WHEN RowNum = 2 THEN Contact END) AS contact2,
    MAX(CASE WHEN RowNum = 3 THEN Contact END) AS contact3
FROM 
    RankedContacts
GROUP BY 
    [Key];

此查询首先根据每个键的排名对联系人进行排名。然后,它使用条件聚合将适当的联系人分配给 contact1、contact2 和 contact3。

可以在这里找到有关此问题的更广泛的讨论:sql server 中的行号

© www.soinside.com 2019 - 2024. All rights reserved.