【问题标题】:Top volume T-SQL顶级卷 T-SQL
【发布时间】:2019-07-16 14:18:52
【问题描述】:

在上面,我想将第一个数据集转换为后者。目标是按最高音量排序数字,然后按音量降序选择这些数字中的前 2 个字母。 T-SQL 中的任何解决方案?谢谢!

【问题讨论】:

  • 请不要发布图片。发布其他人可以复制的文本以帮助您进行查询。
  • top 2 如何产生 10 行结果?由于不是by Volume descending,结果的顺序是什么?你试过什么?
  • 每个数字的前 2 个字母

标签: sql-server tsql sql-order-by items


【解决方案1】:

这是一个经典的 问题,可以使用公用表表达式和row_number() 轻松解决。

首先,创建并填充示例表(在您以后的问题中保存我们这一步)

DECLARE @T as TABLE
(
    Number int,
    Letter char(1),
    Volume int
);

INSERT INTO @T (Number, Letter, Volume) VALUES
(1,'A',230),
(1,'B',534),
(1,'C',23),
(1,'D',42),
(2,'D',566),
(2,'E',24),
(2,'F',566); 
-- you can add more records but this should be enough for this demonstration

然后,对组使用带有row_number()max(...) over... 的公用表表达式并按以下顺序排序:

WITH CTE AS 
(
    SELECT  Number, 
            Letter, 
            Volume, 
            ROW_NUMBER() OVER(PARTITION BY Number ORDER BY Volume DESC) As rn,
            MAX(Volume) OVER(PARTITION BY Number) As MaxVolume,
    FROM @T
)

查询:

    SELECT Number, Letter, Volume
    FROM @T
    WHERE rn <= 2
    ORDER BY MaxVolume DESC

结果:

Number  Letter  Volume
2       D       566
2       F       566
1       B       534
1       A       230

You can see a live demo on rextester.

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    相关资源
    最近更新 更多