3

CreatedDate在我的 SQL 表中调用了一个 DateTime 类型列,并且我使用 SSRS 2008 创建了一个报告。

我在我的报告中将我的表格与这个分组CreatedDate

我需要CreatedDatedd/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 中手动提供排序功能,例如

=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
4

3 回答 3

2

如何ROW_NUMBER() over (order by CreatedDate) as myOrder 在你的 sql 查询中添加一个并按 myOrder 排序?

编辑:

=Format(Fields!date.Value,"dd/MM/yyyy")
于 2012-05-17T14:09:21.717 回答
2

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

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

这样,您可以DisplayDate在 tablix 上使用并按SortDate.

于 2012-05-17T13:43:38.433 回答
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

注意:
- 不要在字段上调用函数然后过滤它
- 不要使用字符串操作将日期时间四舍五入到日期
- 不要按日期的字符串表示形式排序

于 2012-05-17T14:05:28.100 回答