2010-03-23 53 views
1

我正在創建包含按天分組的訂單表的SSRS報告。 現在,我可以輕鬆獲得當天的最大訂單值,並使用SSRS MAX()函數將其置於組標題中。SSRS 2008需要查詢最大訂單的客戶名稱

但是,我也想獲得相應的客戶名稱誰放置此訂單,並將其放置在組頭。

我們可以假設我的結果集只包含日期,名稱和順序值。 在SSRS 2008中有沒有辦法做到這一點?

謝謝

+0

如果您發佈獲取基本結果集的查詢,我們可以幫助您更好。 – 2010-03-23 12:58:16

回答

1

這是懶惰的方式,讓Sql Server給你結果。例如,假設您的原始查詢是這樣的:

SELECT DT.OrderDate, DT.OrderId, DT.CustomerName, DT.OrderValue, 
    GT.OrderId AS MaxOrderId, GT.CustomerName AS MaxCustomerName, GT.OrderValue AS MaxOrderValue 
FROM 
    (SELECT OrderDate, OrderId, CustomerName, OrderValue 
    FROM OrderTable 
    WHERE (OrderDate >= @DateFrom) AND (OrderDate <= @DateTo)) AS DT 
INNER JOIN 
    (SELECT OrderDate, OrderId, CustomerName, OrderValue 
    FROM OrderTable AS OrderTable_1 
    WHERE (OrderDate >= @DateFrom) AND (OrderDate <= @DateTo) AND (OrderId = 
     (SELECT TOP 1 OrderId 
     FROM OrderTable AS OrderTable_2 
     WHERE (OrderDate = OrderTable_1.OrderDate) 
     GROUP BY OrderId 
     ORDER BY SUM(OrderValue) DESC))) AS GT ON DT.OrderDate = GT.OrderDate 
ORDER BY DT.OrderDate, DT.OrderValue DESC 

DT =詳細信息表

SELECT OrderDate, OrderId, CustomerName, OrderValue 
FROM OrderTable 
WHERE (OrderDate >= @DateFrom) AND (OrderDate <= @DateTo) 

與當天的分組結果,使他們出現在每一行加入該

GT =組別結果表

當天的最大值順序現在被添加到每一行,讓您可以輕鬆地將它包含在組標題中。顯然,如果客戶名稱來自不同的表格,則只需要在原始查詢和OrderTable_1查詢中加入該表格即可。

此查詢假定OrderDate字段是沒有時間分量的純日期字段。

+0

有趣的想法克里斯,雖然不知道如果相關的子查詢是最佳的,因爲它多次評估相同的東西。 最後,我創建了3個CTE - 一個用於訂單,一個用於最大訂單價值,另一個用於最大訂單詳情(通過將訂單價值加入第二個CTE)。 最後,我在訂單日期加入了第一個和第三個CTE,以獲得與您相同的結果。 – Chris 2010-03-29 13:19:23

相關問題