2012-05-17 53 views
3

我叫CreatedDate在我的SQL表中的DateTime類型列,我已經創建使用SSRS 2008SSRS轉換日期和GROUPBY

我有我的分組表中我的報告與此CreatedDate的報告。

我需要以這個CreatedDate排列,格式爲dd/MM/yyyy

如果我轉換這個列值Convert(varchar(10),CreateDate,101)我在MM/dd/yyyy格式獲得的價值和它的正確排序DATAS一樣,

03/03/2012 
03/05/2012 
05/03/2012 

同樣的方式,如果我轉換列Convert(varchar(10),CreatedDate,103)我得到的值在dd/MM/yyyy格式和其排序像

03/03/2012 
04/05/2012 
05/03/2012 

,但我需要像組

表3210
03/03/2012 
05/03/2012 
04/05/2012 

這樣,爲了這個,我試圖給排序功能在表矩陣手動像

=Format(Fields!CreatedDate.value,"dd/MM/yyyy") 

,但其沒有工作,我怎麼能解決這個問題....誰能幫助我在這裏...

查詢現在用在這裏

SELECT ItemName 
     , COUNT(ItemName) AS Quantity 
     , SUM(LineTotal) AS Amount 
     , CONVERT(varchar(10), CreatedDate, 103) AS CreatedDate 
FROM StudentFeesItems 
WHERE (CONVERT(varchar(10), CreatedDate, 101) BETWEEN @StartDate AND @EndDate) 
GROUP BY ItemName, CreatedDate 

回答

2

您可以在這2種格式的數據集上的其中一人添加日期,然後排序:

SELECT [YourColumns], Convert(varchar(8),CreateDate,112) SortDate, 
     Convert(varchar(10),CreatedDate,103) Displaydate 
FROM YourTable 

這樣,您可以在您的tablix上使用DisplayDate並通過SortDate手動排序。

+0

偉大的想法,我試過,但仍然我得到相同的順序(不正確) – shanish

+0

@Shanish - 我改變了'convert'爲'SortDate',再試一次,讓我知道,如果它幫助 – Lamak

+0

感謝拉馬克UR類的反應,它不工作,我仍然得到不正確的訂單 – shanish

2

不要將日期轉換爲字符串。將它們保留爲日期並按日期排序。

正如您已經體驗過的,除非您將字符串格式化爲YYYY-MM-DD,否則您將無法獲得所需的訂單。如果您將日期保留爲DATETIME數據類型,您可以按順序排序,按照它進行分組,格式化並按照您喜歡的方式進行操作。

DATEADD(DAY, DATEDIFF(DAY, 0, CreateDate), 0) AS roundedDate 


重新編輯

這是我在你的查詢建議......

WITH 
    main_query 
AS 
(
    SELECT 
    ItemName, 
    DATEADD(DAY, DATEDIFF(DAY, 0, CreatedDate), 0) AS CreatedDate, 
    COUNT(ItemName) AS Quantity, 
    SUM(LineTotal) AS Amount 
    FROM 
    StudentFeesItems 
    WHERE 
     CreatedDate >= @StartDate 
    AND CreatedDate < DATEADD(DAY, 1, @EndDate) 
    GROUP BY 
    ItemName, 
    DATEADD(DAY, DATEDIFF(DAY, 0, CreatedDate), 0) 
) 
SELECT 
    ItemName, 
    Convert(varchar(10), CreatedDate, 103) AS formattedDate, 
    Quantity, 
    Amount 
FROM 
    main_query 
ORDER BY 
    ItemName, 
    CreatedDate 

注:
- 不要在調用函數一個字段然後過濾它
- 不要使用字符串manilpulation爲datetime舍入到一個日期
- 不要按日期

+0

但我需要以dd/MM/yyyy的格式顯示日期,那就是我正在嘗試的東西,如果它的格式爲MM/dd/yyyy – shanish

+0

@Shanish - 只有當所有日期都在同一年。你能否包含你的代碼,以便我們可以直接評論它?同時我爲答案添加了一個通用示例。 – MatBailie

+0

感謝您的回覆德姆斯,請檢查我更新的問題 – shanish

2

的字符串表示排序怎麼樣在你的SQL查詢和訂單通過myOrder加入ROW_NUMBER() over (order by CreatedDate) as myOrder

編輯:

=Format(Fields!date.Value,"dd/MM/yyyy") 
+0

我試着在我的查詢中使用order by子句,因爲我正在使用在我的表組它的不工作的組的CreatedDate,它按自己的順序排序 – shanish

+0

沒有得到它。如果日期在你的小組中,爲什麼不能通過它訂購? – Diego

+0

當然我可以通過它來訂購,如果它的格式爲「MM/dd/yyyy」,它會正確顯示,但我希望它是「dd/MM/yyyy」 – shanish