SSRS转换日期和groupby

时间:2012-05-17 13:31:44

标签: sql ssrs-2008

我的SQL表中有一个名为CreatedDate的DateTime类型列,我使用SSRS 2008创建了一个报告。

我已使用此CreatedDate将我的表格分组到报告中。

我需要以CreatedDate格式订购此dd/MM/yyyy

如果我将此列值转换为Convert(varchar(10),CreateDate,101),则会获得MM/dd/yyyy格式的值,并正确排序数据,

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

但我需要像

那样对表进行分组
03/03/2012
05/03/2012
04/05/2012

像这样,为此我尝试手动提供tablix中的sort函数,如

=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

3 个答案:

答案 0 :(得分:2)

您可以在数据集上添加这两种格式的日期,然后按其中一种进行排序:

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

这样,您就可以在Tablix上使用DisplayDate并按SortDate手动排序。

答案 1 :(得分:2)

请勿将日期转换为字符串。将它们保留为日期并将它们排序为日期。

正如您所经历的那样,除非您将字符串格式化为YYYY-MM-DD,否则您将无法获得所需的订单。如果您将日期保留为DATETIME数据类型,则可以按日期排序,按顺序排序,格式化并按照您的喜好进行操作。

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


<强> RE-修改

以下是您在查询中的建议......

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

注意:
- 不要在字段上调用函数,然后对其进行过滤 - 不要使用字符串操作将日期时间舍入到日期
- 不要按日期的字符串表示法排序

答案 2 :(得分:2)

如何在myOrder的sql查询和订单上添加ROW_NUMBER() over (order by CreatedDate) as myOrder

编辑:

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