2011-03-08 20 views
0

我正在嘗試使用SQL報表生成器3.0創建分步表報表。步驟報告包含組/設備/用戶以及每個組/設備/用戶的關聯總計。不分類的分步表

我希望整個報告按這些總數排序,每個單獨的步驟也按這種方式排序。

當前用戶按照他們的總數排序,但不是設備或組。

有沒有辦法對其他步驟進行排序?

+0

你有沒有試過這兩個答案,看看他們是否適合你? – 2011-03-20 15:49:43

回答

0

您可以使用一些嵌套查詢在SQL中執行此操作。假設您有以下表格:交易,用戶,設備和組。交易表記錄了用戶在設備上的交易,並有一個金額字段進行求和。用戶屬於一個組。

所以,你需要總結的金額爲用戶,爲組和組內使用的設備,這將給你的SQL,看起來像這樣:

SELECT G.Description AS [Group], D.Description AS Device, U.Description AS UserName, MAX(GT.GroupTotal) AS GroupTotal, MAX(GDT.GroupDeviceTotal) AS GroupDeviceTotal, SUM(T.Amount) AS UserTotal 
FROM Transaction AS T 
    INNER JOIN User AS U ON L.UserId = F.UserId 
    INNER JOIN Group AS G ON G.GroupId = L.GroupId 
    INNER JOIN Device AS D ON T.DeviceId = L.DeviceId 
    INNER JOIN 
     (SELECT GroupId, SUM(Amount) AS GroupTotal 
     FROM Transaction 
      INNER JOIN User ON User.UserId = Transaction.UserId 
     WHERE (Transaction.TxDate >= '2011-01-01') 
     GROUP BY User.GroupId) AS GT ON GT.GroupId = U.GroupId 
    INNER JOIN 
     (SELECT GroupId, DeviceId, SUM(Amount) AS GroupDeviceTotal 
     FROM Transaction 
      INNER JOIN User ON User.UserId = Transaction.UserId 
     WHERE (TxDate >= '2011-01-01') 
GROUP BY GroupId, DeviceId) AS GDT ON GDT.GroupId = U.GroupId AND GDT.DeviceId = T.DeviceId 
WHERE (T.TxDate >= '2011-01-01') 
GROUP BY G.GroupId, D.DeviceId, U.UserId 
ORDER BY GroupTotal DESC, GroupDeviceTotal DESC, UserTotal DESC 

。注意where子句使用必須在主查詢和每個嵌套查詢中相同(這是「WHERE(T.TxDate> ='2011-01-01')」位)。

0

你可以嘗試將行/列組區域...然後你有每個組,雙擊組中,選擇「排序」,然後根據需要對包含在該信息添加儘可能多的排序字段組級別。

如果您對數據應用了其他類型...比如對於tablix/matrix,有時SSRS可能會感到困惑,所以如果我的建議確實可以幫助您處理效果,但會出現一些問題,除了這些羣組之外,嘗試刪除已應用於報告中其他數據的所有其他排序......並且我將從最內層開始並努力,試圖不重複處於較低羣組數據中的字段。 (如果這是有道理的)。


編輯:

所以,讓我們說我們有一個獸醫辦公室的一份報告顯示客戶信息,我們希望通過PERSONID,petID和visitID組。整個tablix將按照人名(或姓氏,名字......或其他)排序。然後,您的第一個小組將對personID進行分組並按petName排序。第二個較低的組將在petID上分組,並由visitDate排序。第三個級別將對visitID進行分組,並且...這並不需要進行排序,除非通過visitTime訪問,如果它未包含在visitDate中。