我被要求创建一个按年分组的收入最多的特许经营清单,但是按订单条款需要按收入最多的特许经营商订购,具体取决于日期范围。我可以按单笔(收入)罚款订购,但我如何按收入订购特许经营分组?
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, ',', '')
答案 0 :(得分:1)
如果我理解正确,你可能想要这样的东西:
ORDER BY
SUM(SUM(vremittheaderdetailandfran.remd_LaborRevenue))
OVER (PARTITION BY vFranMasterNumRollup.MasterFranNumber),
REPLACE(vFranMasterNumRollup.FranchiseName, ',', '')
SUM(…) OVER (…)
是一个窗口聚合函数。此特定窗口SUM()
计算WHERE
子句中指定的整个范围内的总计,按vFranMasterNumRollup.MasterFranNumber
对其进行分组(分区)(我理解这是一种特许经营的唯一标识符)。 / p>
窗口SUM()
的参数通常是包含列引用的列或表达式,就像它与“普通”SUM()
一样。在这种情况下,您可以看到另一个SUM()
作为参数。另一个SUM()
是“正常”聚合函数。我们必须直接引用vremittheaderdetailandfran.remd_LaborRevenue
的聚合值而不是列,因为这是GROUP BY
查询,并且有问题的列未包含在GROUP BY
子句中。结果,整个表达式读作“remd_LaborRevenue
之和的总和”,我想这在这种情况下非常有意义。
您可以在OVER Clause (Transact-SQL)手册中阅读有关窗口聚合函数的更多信息。
答案 1 :(得分:0)
如果您使用分组依据,则需要按参与分组的任何列或其中一个聚合列(例如SUM)进行排序
此外,您不需要在订单上添加完整的聚合函数,您只需执行“order by”并添加列的索引即可。例如:
select columns1, column2, sum(coulm3)
from table1
group by columns1, column2
order by 3
将按SUM订购