-1
    SELECT  t_PONumber,
            t_Date,
            t_VendorID,
            t_VendName,
            t_Itemnmbr,
            t_ItemDesc,
            t_UnitCost,
            case when t_QtyOrder = 0 then (Select QtyOrder from POP10110 where PONUMBER =t_PONUMBER and Ord=t_Ord) ELSE t_QtyOrder END AS t_QtyOrder,
            t_QtyRecv,
            t_QtyCancel,
            t_DocNum,
            t_DRorSI,
  --->      case when convert(nvarchar(21),t_RRDate)='Jan  1 1900 12:00AM' then '' else convert(nvarchar(21),t_RRDate) end AS t_RRDate,
            t_DocType,
            t_Ord 
    FROM @SupplierPOMonitoring
    ORDER BY t_Date, t_RRDate--, t_PONumber,t_Ord,t_Itemnmbr

我已将 smalldatetime 格式转换为“1900 年 1 月 2 日”格式样式,当我尝试订购它时,它并没有在我的水晶报告中显示它,尽管它有点像

'10 月 1 日'

'10 月 2 日'

'10 月 5 日'

'10 月 10 日'

'9 月 4 日'

'9 月 7 日'

'9 月 12 日'

'9 月 18 日'

我也可以排序它的月份。如果我不使用它排序的转换日期,但如果我不使用月份但日期排序,我该如何在 sql 或 Crystal Report 中执行此操作。

对报告的实际看法:

在此处输入图像描述

4

2 回答 2

0

不要在 SQL Server 中转换为字符串。而是让 Crystal 进行格式化。这样它就可以根据日期而不是字符串值进行排序。

所以,而不是

case when convert(nvarchar(21),t_RRDate)='Jan  1 1900 12:00AM' then '' else convert(nvarchar(21),t_RRDate) end AS t_RRDate

利用

NULLIF(t_RRDate,'1900-01-01 00:00:00.000') AS t_RRDate

然后,在水晶中,您可以应用日期格式规则并清除 NULL。

您可以为此使用 Crystal Report 的ToText功能:

ToText({datefield},”MMM dd”)
于 2013-10-22T01:14:52.550 回答
0

正如 Ilya 所说,您需要从 SQL 语句中删除转换,以便可以按日期正确排序(月份为 1、2、3、4、5、6、7、8、9、10、11、12 ) 在水晶。如果您将其转换为 SQL 中的字符串,它将按月份名称(一月、二月等)按字母顺序排序。使用 Crystal 中的公式进行转换,以便您可以按日期排序但显示月份名称。

干杯,

克里斯

于 2013-10-22T01:12:44.523 回答