簡體   English   中英

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

[英]ORDER BY an aggregated column in Report Builder 3.0

在Report Builder 3.0上,我檢索了一些項目,並使用Count聚合對它們進行了計數。 現在我要從最高到最低排序。 如何在匯總列上使用ORDER BY函數? 下圖顯示了我要排序的一列,它已被打勾。

圖片

該代碼非常簡單,如下所示:

SELECT DISTINCT act_id,NameOfAct,
FROM Acts

我看着照片。 因此,您可能有相同名稱的重復行為。 並且您想知道具有相同唯一名稱的行為的數量。

您可能要按名稱對結果進行分組:

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

(查詢的其余部分保持不變。)

您的圖片表明您還希望在底部有一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM