我正在尝试根据2个案例选择生成付款日期。 第一种是确定付款时间表,第二种是确定付款日期/日期。
我也加入了2个表,第一个包含实际记录,第二个包含付款计划。他们都是由客户#。
加入到目前为止,这是我的代码:
Select comp, cust, data.inv, dat, amt, rel.PaymentSchedule, rel.PaymentDay,
case rel.PaymentSchedule when 'BiMonthly' then
case rel.PaymentDay when '1' then DATEADD(MM, 2, dat) end
else
case rel.PaymentDay when '2' then DATEADD(MM, 2, dat) end
else if
rel.PaymentSchedule when 'Daily' then
case rel.PaymentDay when '30' then DATEADD(MM, 1, dat) end
else
case rel.PaymentDay when '47' then DATEADD(dd, 47, dat) end
end as PayDate
from
(
select b.ASCOMP as comp, b.ASCUST as cust, b.ASINV# as inv, b.ASIDAT as dat, b.ASINAM as amt
from SOLARSOFT.BNDSYS02.IVPDAT.AROHT a
right JOIN SOLARSOFT.BNDSYS02.IVPDAT.AROP b
on a.ASINV# = b.ASINV#
where
a.ASINV# is null
) as data
inner join tbl_payRel rel on cust = rel.Customer#
where
(inv not like 'D%')
and ( inv not like 'P%')
and (cust <> 1308)
and (cust <> 1067)
and ( cust <> 1295)
order by rel.PaymentSchedule, rel.PaymentDay, cust
问题: 消息156,第15级,状态1,第7行 关键字'else'附近的语法不正确。 消息4145,第15级,状态1,第8行 在预期条件的上下文中指定的非布尔类型的表达式,在'when'附近。 信息156,第15级,状态1,第24行 关键字'as'附近的语法不正确。
我哪里出错了?一整天都在努力工作!
感谢您的帮助!
答案 0 :(得分:1)
专注于此片段:
case rel.PaymentSchedule when 'BiMonthly' then
case rel.PaymentDay when '1' then DATEADD(MM, 2, dat) end
else
case rel.PaymentDay when '2' then DATEADD(MM, 2, dat) end
else if
rel.PaymentSchedule when 'Daily' then
case rel.PaymentDay when '30' then DATEADD(MM, 1, dat) end
else
case rel.PaymentDay when '47' then DATEADD(dd, 47, dat) end
end as PayDate
只是一两条评论......前两个评论相同,是故意的吗?为什么将这个嵌套为两个案例?这可以是一个声明:
case rel.paymentday
when '1' then DATEADD(MM, 2, dat)
when '2' then DATEADD(MM, 2, dat)
when '30' then DATEADD(MM, 1, dat)
when '47' then DATEADD(dd, 47, dat)
end as PayDate
您不需要结束每个案例陈述......他们可以根据需要评估多个案例。当我无法记住手边的语法时,我使用微软的这个参考: http://msdn.microsoft.com/en-us/library/ms181765.aspx
我应该添加......如果你想要,你仍然可以嵌套......
case rel.PaymentSchedule
when 'BiMonthly' then
case rel.PaymentDay when 1 then DATEADD(MM, 2, dat)
when 2 then DATEADD(MM, 2, dat)
end
when 'Daily' then
case rel.PaymentDay when '30' then DATEADD(MM, 1, dat)
when '47' then DATEADD(dd, 47, dat)
end
end