我的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
答案 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")