我有这条线,我正在努力将查询从Oracle转换为SQL Server 2012.以下行是:
DECODE(SUM(DECODE(a.canceldate, NULL, 1,0)), 1, NULL, To_Date(MAX(TO_CHAR(a.canceldate,'yyyymmdd')), 'yyyymmdd')) dCancelDate,
正如我所说的那样将其转换为:
case a.canceldate
(when sum(case a.canceldate when Null then 1 else 0 end))
when 1
then 0
else convert(datetime,a.canceldate)
end max(a.canceldate) as dCancelDate,
我会感谢一些助手,我的线路对于SQL Server 2012不正确。
答案 0 :(得分:1)
case sum(case when a.canceldate is null then 1 else 0 end) when 1 then null
else to_date( ... ) end dCancelDate, ...
公式相当于
when sum(...) when 1
我在翻译中看到的一个错误是你有when sum(...) = 1
。您不能两种方式,sum(...) when 1
或to_date()
。这可能是唯一的错误,我看起来并不太难。
你在trunc(max(a.canceldate))
中所拥有的是可怕的;你是否将日期转换为字符串,然后采用最大的字母顺序,然后转换回日期?为什么?也许只是为了删除时间组件?使用ember init
可以轻松完成这项工作。