使用 SQL Server 中的 2 个表根据优先级选择数据

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

我是 SQL 初学者。我需要根据下面的优先级条件选择不同的数据(主题,用户编号)按主题,用户编号列排序。

条件:

  1. 从表 A 中选择具有最高费率的(主题,用户编号)
  2. 如果两个或多个主题在表 A 中具有相同的评级,则从表 B 中选择(主题,用户编号)具有相同主题的最高评级。

如果数据满足条件1(如user_1/user_2/user_4),则直接从表A中获取数据。

但是,如果按主题和用户编号排序的费率相同(例如 user_3 / user_5),则与具有相同 A.Subject 和 A.UserNo 的表 B 连接并从表 B 中获取数据(主题、用户编号)

[表A]

主题 用户号 最高_率
A 用户_1 10
A 用户_2 8
A 用户_3 5
B 用户_3 5
B user_4 10
C user_5 20
D user_5 20

[表B]

主题 用户号 最高_率
A 用户_1 10
A 用户_2 8
A 用户_3 100
B 用户_3 5
B user_4 10
C user_5 20
D user_5 200

预期结果集:

主题 用户号
A 用户_1
A 用户_2
A 用户_3
B user_4
D user_5

你能告诉我如何在 SQL Server 中进行我想要的查询吗?

SELECT
    A.Subject, A.UserNo, A.highest_Rate
FROM
    Table A
INNER JOIN
    Table B ON A.UserNo = B.UserNo 
            AND A.Subject = B.Subject

由于我现在无法访问数据库,所以无法说出我尝试查询的详细信息。

sql sql-server database select max
2个回答
1
投票

也许是这样的:

select UserNo, Subject
from (
    select t.UserNo, t.Subject
    , row_number() over(partition by t.userno order by t.highest_rate desc, t2.highest_rate desc) as sort
    from (
        VALUES  (N'A', N'user_1', 10)
        ,   (N'A', N'user_2', 8)
        ,   (N'A', N'user_3', 5)
        ,   (N'B', N'user_3', 5)
        ,   (N'B', N'user_4', 10)
        ,   (N'C', N'user_5', 20)
        ,   (N'D', N'user_5', 20)
    ) t (Subject,UserNo,highest_Rate)
    left join (
        VALUES  (N'A', N'user_1', 10)
        ,   (N'A', N'user_2', 8)
        ,   (N'A', N'user_3', 100)
        ,   (N'B', N'user_3', 5)
        ,   (N'B', N'user_4', 10)
        ,   (N'C', N'user_5', 20)
        ,   (N'D', N'user_5', 200)
    ) t2 (Subject,UserNo,highest_Rate)
        ON  t2.userNo  = t.UserNo
        AND t2.Subject = t.Subject
    ) x
where x.sort = 1

对于每个用户,row_number 将首先按主表的最高评分返回顺序,并按 DESC 排序作为决胜局第二个表的最高评分。


0
投票

你能告诉我如何在 SQL Server 中进行我想要的查询吗?

我希望我正确理解了你的需求,那么你可以尝试使用这个SQL查询:

SELECT Subject, UserNo
FROM (
  SELECT A.Subject, A.UserNo, MAX(A.highest_Rate) AS highest_Rate
  FROM tableA A
  GROUP BY Subject, UserNo
  UNION ALL
  SELECT B.Subject, B.UserNo, MAX(B.highest_Rate) AS highest_Rate
  FROM tableB B
  GROUP BY Subject, UserNo
) AS T
ORDER BY Subject, UserNo;

附注

如果它对您不起作用或您有任何疑问,请告诉我。

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