SQL命令日期参数

2020-09-20 12:06发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要专家的帮助!

我最初创建此脚本是为了在每个星期一运行有关上一个星期六的报告。

现在的要求是,报表可以在昨天(星期日),上周(星期日-星期六)和上个月(上一个上个月的前一个月)以及自定义日期范围内运行。

这是我的原始命令,我知道我需要在Crystal Modify命令窗口中添加参数,但这就是我迷路的地方。 用户希望在下拉菜单中查看上述参数选项以获取开始和结束日期(t-1,t-7,mb-1,me-1,自定义日期)。

希望这是可能的!

选择
COALESCE(MAX(CONVERT(VARCHAR,EMP.NAME)),'* UNKNOWN CODER ID')"编码器用户ID"
,PAC.TAR_ID" TAR ID"
,PAC。 CODED_DATE" CODED DATE"
,COUNT(PAC.CHARGE_LINE)" LINE COUNT"
,COALESCE(MAX(CONVERT(VARCHAR,PAC.TX_ID)),'* UNKNOWN TX ID')" TX ID"
,COALESCE(MAX(CONVERT(VARCHAR,PAC.OLD_RETRO_ETR_ID)),'* UNKNOWN TX ID')" ETR ID"


FROM
PRE_AR_CHG PAC
左外连接 ITY_EMP EMP
在PAC.CODER_USER_ID = EMP.USER_ID

在哪里

GETDATE()-9和GETDATE()-2之间的PAC.CODED_DATE

GROUP BY CODE.DATE
,EMP.USER_ID
,PAC.TAR_ID

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我需要专家的帮助!

我最初创建此脚本是为了在每个星期一运行有关上一个星期六的报告。

现在的要求是,报表可以在昨天(星期日),上周(星期日-星期六)和上个月(上一个上个月的前一个月)以及自定义日期范围内运行。

这是我的原始命令,我知道我需要在Crystal Modify命令窗口中添加参数,但这就是我迷路的地方。 用户希望在下拉菜单中查看上述参数选项以获取开始和结束日期(t-1,t-7,mb-1,me-1,自定义日期)。

希望这是可能的!

选择
COALESCE(MAX(CONVERT(VARCHAR,EMP.NAME)),'* UNKNOWN CODER ID')"编码器用户ID"
,PAC.TAR_ID" TAR ID"
,PAC。 CODED_DATE" CODED DATE"
,COUNT(PAC.CHARGE_LINE)" LINE COUNT"
,COALESCE(MAX(CONVERT(VARCHAR,PAC.TX_ID)),'* UNKNOWN TX ID')" TX ID"
,COALESCE(MAX(CONVERT(VARCHAR,PAC.OLD_RETRO_ETR_ID)),'* UNKNOWN TX ID')" ETR ID"


FROM
PRE_AR_CHG PAC
左外连接 ITY_EMP EMP
在PAC.CODER_USER_ID = EMP.USER_ID

在哪里

GETDATE()-9和GETDATE()-2之间的PAC.CODED_DATE

GROUP BY CODE.DATE
,EMP.USER_ID
,PAC.TAR_ID

付费偷看设置
发送
5条回答
N-Moskvin
1楼 · 2020-09-20 12:21.采纳回答

这可能取决于您使用的Crystal的版本,但可能不是您的用户想要的方式。 我不记得哪个版本为我们提供了可选参数-是2008还是2011。但是,如果未选择自定义日期,则无法隐藏日期参数。

您将创建一个"日期类型"参数,该参数将具有您的选项-昨天,上周,上个月,自定义。 在命令编辑器中创建此参数。 保存命令后,就可以在报表的"字段资源管理器"中对其进行编辑以添加有效值。

基于您发布的SQL,我将假定您正在使用MS SQL Server-因此,我将使用该语法。 我还将对此进行设置,以使其不依赖于星期一运行的报告-它会计算上一整周和上一整月。 您的Where子句将如下所示:

哪里
   ('{?Date Type}'='昨天'和PAC.CODED_DATE = GetDate()-1)
   要么
   ('{?Date Type}'='Last Week'和PAC.CODED_DATE
         GetDate()-DatePart(wd,GetDate())-6和
         GetDate()-DatePart(wd,GetDate()))
   要么
   ('{?Date Type}'='Last Month'and PAC.CODED_DATE之间
         DateAdd(m,-1,GetDate()-Day(GetDate())+1)和
         GetDate()-Day(GetDate()))
   要么
   ('{?Date Type}'='Custom'和PAC.CODED_DATE在{?StartDate}和{?EndDate}之间)

如果您以前从未在命令中使用过参数,请参阅我的博客文章此处以获取更多信息。

-戴尔

何必丶何苦呢
2楼-- · 2020-09-20 12:07

当我在命令中放置上述where子句并创建一个名为Date Type的字符串参数时,我无法从数据库错误中检索数据,

huskylover
3楼-- · 2020-09-20 12:30

{?Start Date}和{?End Date}也是您需要在命令编辑器中创建的带有"日期"类型的参数。

您得到的具体错误编号是什么?

您要连接到哪种类型的数据库? 我假设使用MS SQL Server,但语法可能会有所不同。 您的Where子句中是否还有其他过滤器? 如果是,那么您需要在上面的where子句下的所有内容之间加上一对括号。

对于故障排除,您可以尝试以下几种方法:

1。 将查询移至SQL Server Management Studio或Toad之类的查询工具。 将参数的语法更改为数据库的语法。 因此,例如,如果您使用的是SQL Server,则将这样的内容放在查询的顶部:

声明@DateType varchar(10)
 声明@StartDate日期
 声明@EndDate日期
 设置@DateType ='昨天'
 设置@StartDate = GetDate()-7
 设置@EndDate = GetDate()
 选择...
 哪里... 

您将用@DateType替换'{?Date Type}',用@StartDate替换{?Start Date},等等。使所有选项都可以在那里使用。 一旦工作,请删除在查询上方添加的clarify和set语句,并将参数更改回Crystal的语法。 别忘了在{?Date Type}周围加上单引号,否则它将不起作用! 将此粘贴回报表中。

2。 在Crystal中,从条件的第一个" OR"开始注释掉,以便您仅测试"昨天"。 确保正常工作。 然后加回第一个OR及其下的语句,并确保"上周"正常运行。 然后添加条件的最后一部分。

-戴尔

Haoba3210
4楼-- · 2020-09-20 12:23

很高兴我可以帮忙!

-戴尔

嗨,戴尔,

非常感谢! 除了自定义日期部分(用户最终不需要该部分)之外,上述方法非常有效。

我分别使用每个参数运行该命令,但自定义逻辑仅出现错误。 错误是数据库无法连接/查找数据。 如上所述,我已经设置了自定义参数,开始日期和结束日期。

再次感谢!

一周热门 更多>