2

我被要求创建一个按年份分组的收入最多的特许经营列表,但是 order by 子句需要根据日期范围按收入最多的特许经营商进行排序。我可以按单笔金额(收入)罚款,但我如何按收入对特许经营分组进行排序?

group by
    vFranMasterNumRollup.MasterFranNumber, 
    REPLACE(vFranMasterNumRollup.FranchiseName, ',', '') ,
    YEAR(vremittheaderdetailandfran.remd_ServiceDate)
order by
    sum(vremittheaderdetailandfran.remd_LaborRevenue) desc,
    REPLACE(vFranMasterNumRollup.FranchiseName, ',', '')

你在这里看到我试图在排序中添加另一列,但我想将最高的特许经营组按降序排列

如果您需要更多代码,请告诉我

这是更多代码:

SELECT     vFranMasterNumRollup.MasterFranNumber, REPLACE(vFranMasterNumRollup.FranchiseName, ',', '') AS FranchiseName, 
sum(vremittheaderdetailandfran.remd_LaborRevenue),YEAR(vremittheaderdetailandfran.remd_ServiceDate) 
FROM         vremittheaderdetailandfran INNER JOIN
                      vFranMasterNumRollup ON vremittheaderdetailandfran.remh_FranchiseNumber = vFranMasterNumRollup.fran_FranchiseID
WHERE     (vremittheaderdetailandfran.remd_ServiceDate BETWEEN @startdate and @enddate AND (vFranMasterNumRollup.fran_Status = N'ACTIVE') OR
                      (vremittheaderdetailandfran.remd_ServiceDate BETWEEN @startdate and @enddate))
group by vFranMasterNumRollup.MasterFranNumber, 
REPLACE(vFranMasterNumRollup.FranchiseName, ',', '') , YEAR(vremittheaderdetailandfran.remd_ServiceDate)
order by sum(vremittheaderdetailandfran.remd_LaborRevenue) desc,REPLACE(vFranMasterNumRollup.FranchiseName, ',', '')
4

2 回答 2

1

如果我理解正确,你可能想要这样的东西:

ORDER BY
   SUM(SUM(vremittheaderdetailandfran.remd_LaborRevenue))
     OVER (PARTITION BY vFranMasterNumRollup.MasterFranNumber),
   REPLACE(vFranMasterNumRollup.FranchiseName, ',', '')

SUM(…) OVER (…)事情是一个窗口聚合函数。这个特定的窗口SUM()计算您的子句中指定的整个范围内的总数,并按(我理解这是一种特许经营唯一标识符)对WHERE它们进行分组(分区)。vFranMasterNumRollup.MasterFranNumber

windowed 的参数SUM()通常是一列或包含列引用的表达式,就像它与 "normal" 一样SUM()。在这种情况下,您可以将另一个SUM()视为参数。另一个SUM()是“正常”聚合函数。我们必须直接引用聚合值vremittheaderdetailandfran.remd_LaborRevenue而不是列,因为这是一个GROUP BY查询,并且相关列不包含在GROUP BY子句中。结果,整个表达式读作“sum of sums of remd_LaborRevenue”,我猜这在这种情况下非常有意义。

您可以在OVER 子句 (Transact-SQL)手册中阅读有关窗口聚合函数的更多信息。

于 2012-04-04T18:06:03.410 回答
0

如果您使用分组依据,则需要按参与分组的任何列或聚合列之一(例如 SUM)排序

此外,您不需要在 order by 上添加完整的聚合功能,您可以简单地执行“order by”并添加列的索引。例如:

select columns1, column2, sum(coulm3)
from table1
group by columns1, column2
order by 3

将按 SUM 排序

于 2012-04-04T14:39:39.890 回答