在报表生成器3.0中按聚合列排序

时间:2019-03-26 07:43:27

标签: sql sql-server

在Report Builder 3.0上,我检索了一些项目并使用Count聚合对它们进行了计数。现在我要从最高到最低排序。如何在汇总列上使用ORDER BY函数?下图显示了我要排序的一列,它已被选中。

Pic

代码非常简单,如下所示:

SELECT DISTINCT act_id,NameOfAct,
FROM Acts

2 个答案:

答案 0 :(得分:0)

我看了看照片。因此,您可能有相同名称的重复行为。而且您想知道具有相同唯一名称的行为的数量。

您可能要按名称对结果进行分组:

GROUP BY NameOfAct

并在查询结果中包含行为名称及其计数:

SELECT NameOfAct, COUNT(*) AS ActCount

(由于act_id列未包含在组中,因此您需要在SELECT中省略它。由于所有组都已经是唯一的,因此DISTINCT也不再是必需的。)

最后,您可以对数据进行排序(可能下降以使具有最高计数的行为排在最前面):

ORDER BY ActCount DESC

您的完整查询将变成这样:

SELECT NameOfAct, COUNT(*) AS ActCount
FROM Acts
GROUP BY NameOfAct
ORDER BY ActCount DESC

编辑:

顺便说一句,您在SELECT子句中使用了字段“ act_id”。这有点令人困惑。如果您想知道计数,则需要查看完整的表数据或将表数据分组为较小的组(使用GROUP BY子句)。然后,您可以使用聚合函数来获取有关这些组(或整个表)的更多信息,例如计数,平均值,最小值,最大值...

如果要对分组数据使用统计/汇总方法,则单记录信息(例如您的行为ID)通常并不重要。假设您的查询返回的行为名称被使用了10次。然后,表中有10条记录,每条记录都有唯一的act_id,但名称相同。

如果您只需要一个代表每个组/行为名称的act_id(并假设act_id是一个自动编号字段),则可以使用MAX聚合函数在查询中包括最新/最大的act_id值:

SELECT NameOfAct, COUNT(*) AS ActCount, MAX(act_id) AS LatestActId

(查询的其余部分保持不变。)

答案 1 :(得分:0)

您的图片指示您还希望在底部Total行:

SELECT
  COALESCE(NameOfAct,'Total') NameOfAct,
  COUNT(DISTINCT act_id) c
FROM Acts
GROUP BY ROLLUP(NameOfAct)
ORDER BY
    CASE WHEN NameOfAct is null THEN 1 ELSE 0 END,
    c DESC;

示例数据的结果:

NameOfAct   count
--------------  -------
Act_B           3
Act_A           2
Act_Z           1
Total           6

尝试使用以下示例行:http://sqlfiddle.com/#!18/dbd6c/2