使用日期参数添加 case 语句时出错 "Operand type clash: date is incompatible with int"
Error when adding case statement using date paramaters "Operand type clash: date is incompatible with int"
我有一个查询,目标是允许用户将开始和结束日期传递给范围内的 select 客户销售。此外还有两个子查询,一个获取客户的第一个订单日期,另一个获取客户在 selected 日期范围之前的最后一个订单日期。
查询工作正常,直到我添加一个案例语句,尝试根据新客户状态和客户重新登机状态创建一些客户分组。
我曾多次尝试重新设计子查询,但我认为问题出在 case 语句中。关于别名,当前配置有点混乱,子查询堆叠在一起而不是单独连接,因此命名约定很奇怪,但同样,查询一直有效,直到我尝试添加 case 语句。
不幸的是,我不太了解可能是什么问题,因此非常感谢您的帮助。案例陈述如下。
返回的错误是
Operand type clash: date is incompatible with int
代码:
CASE
WHEN LAST_ORD.FIRST_ORDER BETWEEN @START_DATE AND @END_DATE
THEN 'NEW IN SELECTED PERIOD'
WHEN LAST_ORD.FIRST_ORDER <= @END_DATE - 365
THEN 'NEW IN LAST YEAR'
WHEN LAST_ORD.LAST_ORDERED < @START_DATE - 730
THEN 'REBOARDED 2+Y INACTIVE'
WHEN LAST_ORD.LAST_ORDERED < @START_DATE - 365
THEN 'REBOARDED 1+Y INACTIVE'
ELSE 'ACTIVE CUSTOMER'
END AS CUST_HIST
你需要dateadd
CASE WHEN LAST_ORD.FIRST_ORDER BETWEEN @START_DATE AND @END_DATE THEN 'NEW IN SELECTED PERIOD'
WHEN LAST_ORD.FIRST_ORDER <= DATEADD(day,- 365,@END_DATE ) THEN 'NEW IN LAST YEAR'
WHEN LAST_ORD.LAST_ORDERED < DATEADD(day,- 730,@START_DATE ) THEN 'REBOARDED 2+Y INACTIVE'
WHEN LAST_ORD.LAST_ORDERED < @DATEADD(day,- 365,@START_DATE )THEN 'REBOARDED 1+Y INACTIVE'
ELSE 'ACTIVE CUS
我有一个查询,目标是允许用户将开始和结束日期传递给范围内的 select 客户销售。此外还有两个子查询,一个获取客户的第一个订单日期,另一个获取客户在 selected 日期范围之前的最后一个订单日期。
查询工作正常,直到我添加一个案例语句,尝试根据新客户状态和客户重新登机状态创建一些客户分组。
我曾多次尝试重新设计子查询,但我认为问题出在 case 语句中。关于别名,当前配置有点混乱,子查询堆叠在一起而不是单独连接,因此命名约定很奇怪,但同样,查询一直有效,直到我尝试添加 case 语句。
不幸的是,我不太了解可能是什么问题,因此非常感谢您的帮助。案例陈述如下。
返回的错误是
Operand type clash: date is incompatible with int
代码:
CASE
WHEN LAST_ORD.FIRST_ORDER BETWEEN @START_DATE AND @END_DATE
THEN 'NEW IN SELECTED PERIOD'
WHEN LAST_ORD.FIRST_ORDER <= @END_DATE - 365
THEN 'NEW IN LAST YEAR'
WHEN LAST_ORD.LAST_ORDERED < @START_DATE - 730
THEN 'REBOARDED 2+Y INACTIVE'
WHEN LAST_ORD.LAST_ORDERED < @START_DATE - 365
THEN 'REBOARDED 1+Y INACTIVE'
ELSE 'ACTIVE CUSTOMER'
END AS CUST_HIST
你需要dateadd
CASE WHEN LAST_ORD.FIRST_ORDER BETWEEN @START_DATE AND @END_DATE THEN 'NEW IN SELECTED PERIOD'
WHEN LAST_ORD.FIRST_ORDER <= DATEADD(day,- 365,@END_DATE ) THEN 'NEW IN LAST YEAR'
WHEN LAST_ORD.LAST_ORDERED < DATEADD(day,- 730,@START_DATE ) THEN 'REBOARDED 2+Y INACTIVE'
WHEN LAST_ORD.LAST_ORDERED < @DATEADD(day,- 365,@START_DATE )THEN 'REBOARDED 1+Y INACTIVE'
ELSE 'ACTIVE CUS