尝试从上一年获取数据,而不管它是否是a年。

2020-09-10 23:52发布

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

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


我将SQL Server 2012与我们的ERP SAP Business One一起使用,我发现某些年份可能是a年。 现在,我尝试使用静态日期来查看是否可以取得上一年的销售额。 在ERP中,我将用一个特殊的变量替换日期,最终用户可以选择日期。 但是在SQL Manager中运行代码

时出现此错误

"消息402,级别16,状态1,行3
数据类型varchar和varchar在减法运算符中不兼容。"

 SELECT YEAR(getdate())-1为'Year',(SELECT ISNULL(SUM(DocTotal-VatSum),0)
 从OINV T0
 T0.DocDate> =(CONVERT(decimal(10,2),'2019-03-01')-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END)和T0。[DocDate] <='2019-03-31'-CASE
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='$')-
 (SELECT ISNULL(SUM(DocTotal-VatSum),0)
 从ORIN T1
 在'2019-03-01'之间的T1.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='$')AS'Total CND Sales',

 (SELECT ISNULL(SUM(DocTotalFC-VatSumFC),0)
 从OINV T0
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='USD')-
 (SELECT ISNULL(SUM(DocTotalFC-VatSumFC),0)
 从ORIN T1
 在'2019-03-01'之间的T1.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='USD')作为"美国总销售量",

 (选择总和(税总和)
 从OINV T0
 内联接INV4 T1在T1.DocEntry = T0.DocEntry和staType = 2
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束) -
 (选择总和(税总和)
 从ORIN T0
 内连接RIN4 T1开启T1.DocEntry = T0.DocEntry AND staType = 2
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END)作为"总消费税",

 (选择总和(税总和)
 从OINV T0
 内联接INV4 T1上T1.DocEntry = T0.DocEntry AND staType = 1
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束) -
 (选择总和(税总和)
 从ORIN T0
 内联接RIN4 T1开启T1.DocEntry = T0.DocEntry AND staType = 1
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END)作为"总PST" 

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

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


我将SQL Server 2012与我们的ERP SAP Business One一起使用,我发现某些年份可能是a年。 现在,我尝试使用静态日期来查看是否可以取得上一年的销售额。 在ERP中,我将用一个特殊的变量替换日期,最终用户可以选择日期。 但是在SQL Manager中运行代码

时出现此错误

"消息402,级别16,状态1,行3
数据类型varchar和varchar在减法运算符中不兼容。"

 SELECT YEAR(getdate())-1为'Year',(SELECT ISNULL(SUM(DocTotal-VatSum),0)
 从OINV T0
 T0.DocDate> =(CONVERT(decimal(10,2),'2019-03-01')-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END)和T0。[DocDate] <='2019-03-31'-CASE
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='$')-
 (SELECT ISNULL(SUM(DocTotal-VatSum),0)
 从ORIN T1
 在'2019-03-01'之间的T1.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='$')AS'Total CND Sales',

 (SELECT ISNULL(SUM(DocTotalFC-VatSumFC),0)
 从OINV T0
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='USD')-
 (SELECT ISNULL(SUM(DocTotalFC-VatSumFC),0)
 从ORIN T1
 在'2019-03-01'之间的T1.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END AND DocCur ='USD')作为"美国总销售量",

 (选择总和(税总和)
 从OINV T0
 内联接INV4 T1在T1.DocEntry = T0.DocEntry和staType = 2
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束) -
 (选择总和(税总和)
 从ORIN T0
 内连接RIN4 T1开启T1.DocEntry = T0.DocEntry AND staType = 2
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END)作为"总消费税",

 (选择总和(税总和)
 从OINV T0
 内联接INV4 T1上T1.DocEntry = T0.DocEntry AND staType = 1
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束) -
 (选择总和(税总和)
 从ORIN T0
 内联接RIN4 T1开启T1.DocEntry = T0.DocEntry AND staType = 1
 在'2019-03-01'之间的T0.DocDate-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 结束和'2019-03-31'-案例
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 然后" 366"
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 然后
 '365'
 否则为'0'
 END)作为"总PST" 
付费偷看设置
发送
2条回答
Nan4612
1楼 · 2020-09-11 00:47.采纳回答

尊敬的Johnathan Brotto,

除了提到的 Johan Hakkesteegt 之外,您还正在将DATE类型与小数进行比较 。 那将返回错误。 如果您想保持查询的状态不变,我调整了SQL的某些部分以确保数据类型正常工作。 只要确保比较中的值有意义即可。 这是下面的修改后的查询。

此致

Varnavas Eleftheriou

选择
 YEAR(getdate())-1作为"年份",
 (SELECT ISNULL(SUM(DocTotal-VatSum),0)
 从OINV T0
 在哪里CONVERT(decimal(10,2),T0.DocDate)> =(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)然后366
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)然后365
 其他0
 结束
 AND CONVERT(十进制(10,2),T0.DocDate)<=(CONVERT(十进制(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)
 当时366
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)
 当时365
 其他0
 结束
 AND DocCur ='USD')-(选择ISNULL(SUM(DocTotal-VatSum),0)
 从ORIN T1
 在什么地方转换(decimal(10,2),T1.DocDate)(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)然后366
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)然后365
 其他0
 结束
 AND'20190331'-
 案件
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)时365
 其他0
 结束
 AND DocCur ='USD')作为" CND总销售额",
 (SELECT ISNULL(SUM(DocTotalFC-VatSumFC),0)
 从OINV T0
 在什么地方CONVERT(decimal(10,2),T0.DocDate)(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)时365
 其他0
 结束
 AND'20190331'-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)时365
 其他0
 结束
 AND DocCur ='USD')-
 (SELECT ISNULL(SUM(DocTotalFC-VatSumFC),0)
 从ORIN T1
 在什么地方转换(decimal(10,2),T1.DocDate)(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)然后366
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)然后365
 其他0
 结束
 AND'20190331'-
 案件
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T1。[DocDate]))%4!= 0.00)时365
 其他0
 结束
 AND DocCur ='USD')作为"美国总销售量",
 (选择总和(税总和)
 从OINV T0
 内联接INV4 T1在T1.DocEntry = T0.DocEntry和staType = 2
 在什么地方CONVERT(decimal(10,2),T0.DocDate)(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)然后366
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)然后365
 其他0
 结束
 AND'20190331'-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)然后366
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)时365
 其他0
 结束) -
 (选择总和(税总和)
 从ORIN T0
 内连接RIN4 T1开启T1.DocEntry = T0.DocEntry AND staType = 2
 在什么地方CONVERT(decimal(10,2),T0.DocDate)(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)然后365
 其他0
 结束
 AND'20190331'-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)然后366
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)然后365
 其他0
 END)作为"总消费税",


 (选择总和(税总和)
 从OINV T0
 内联接INV4 T1上T1.DocEntry = T0.DocEntry AND staType = 1
 在什么地方CONVERT(decimal(10,2),T0.DocDate)(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)时365
 其他0
 结束
 AND'20190331'-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)时365
 其他0
 结束) -
 (选择总和(税总和)
 从ORIN T0
 内联接RIN4 T1开启T1.DocEntry = T0.DocEntry AND staType = 1
 在什么地方CONVERT(decimal(10,2),T0.DocDate)(CONVERT(decimal(10,2),CONVERT(Datetime,'20190301',112)))-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)然后366
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)时365
 其他0
 结束和'20190331'-
 案件
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4 = 0.00)时366时
 当(CONVERT(decimal(10,2),YEAR(T0。[DocDate]))%4!= 0.00)时365
 其他0
 END)作为"总PST"
 
DafaDDDa
2楼-- · 2020-09-11 00:41

嗨乔纳森(Jonathan),

发生错误是因为您使用了" 0"," 365"和" 366"

请使用0、365和 366

问候,

Johan

PS DocDate> = DATEADD(year,-1,GETDATE())也应该起作用。

一周热门 更多>