1

我有 3 列 ( Year, Number, SUM(Amount)),我正在尝试按金额的最大总和对它们进行排序。

SELECT TOP 1000 
    YEAR(period) AS [Year], id_number, 
    SUM(ISNULL(amount, 0)) AS [Amount]
FROM 
    table
WHERE 
    (YEAR(period) >= 2010 AND YEAR(period) < 2021)
GROUP BY 
    YEAR(period), id_number
ORDER BY 
    SUM(ISNULL(amount, 0)) DESC, id_number, YEAR

这不是我想要实现的排序。我想按他们的 id_number 将它们分组在一起,但按返回的所有年份的最大数量排序。我猜我可能需要写一个案例陈述,但我还没有弄清楚。如果我这样做,我会更新。在我为这个问题绞尽脑汁之前,我也想寻求帮助。

非常感谢您提前。

4

4 回答 4

2

根据您的描述,您希望按任何 year的最大总和对id进行排序。如果是这种情况,请使用以下窗口函数:ORDER BY

SELECT TOP 1000 YEAR(period) AS [Year], id_number, 
       SUM(ISNULL(amount, 0)) AS [Amount]
FROM table
WHERE YEAR(period) >= 2010 AND YEAR(period) < 2021
GROUP BY YEAR(period), id_number
ORDER BY MAX(SUM(ISNULL(amount, 0))) OVER (PARTITION BY id_number),
         id_number, YEAR;

需要第二个排序键,因此id_number()当有关系时,给定的所有行都在一起。

于 2021-05-17T18:36:24.533 回答
1

我认为这对你来说应该足够了。只需将其包装在子查询中即可

SELECT * 
FROM 
    (
        SELECT TOP 1000 
            YEAR(period) AS [Year], id_number, 
            SUM(ISNULL(amount, 0)) AS [Amount]
        FROM 
            table
        WHERE 
            (YEAR(period) >= 2010 AND YEAR(period) < 2021)
        GROUP BY 
            YEAR(period), id_number
    ) x
ORDER BY 
    MAX(ISNULL(amount, 0)) DESC, id_number, YEAR
于 2021-05-17T16:02:06.113 回答
1

您可以按索引引用列,例如:

SELECT TOP 1000 
    YEAR(period) AS [Year], id_number, 
    SUM(ISNULL(amount, 0)) AS [Amount]
FROM 
    table
WHERE 
    (YEAR(period) >= 2010 AND YEAR(period) < 2021)
GROUP BY 
    YEAR(period), id_number
ORDER BY 
    3 DESC, id_number, YEAR
于 2021-05-17T16:02:09.787 回答
0

非常感谢@Doug,我将运行它并尝试一下。我还想出了一个可能有点疯狂但有效的解决方案。哈哈。

SELECT t2.row, YEAR(period) AS [Year], t1.id_number, SUM(ISNULL(amount,0)) AS [Consumption]
FROM table t1 JOIN 
(SELECT id_number, ROW_NUMBER() over (order by SUM(ISNULL(amount,0))desc) as row
FROM table
WHERE (YEAR(period) >= 2010 AND YEAR(period) < 2021)
GROUP BY id_number) t2 ON t1.id_number = t2.id_number
WHERE (YEAR(period) >= 2010 AND YEAR(period) < 2021)
GROUP BY t2.row, YEAR(period), t1.id_number
ORDER BY t2.row, year

@Larnu,我会考虑解决这个问题。谢谢你。

于 2021-05-17T16:12:04.347 回答