如果字段asofdate
等于表中的最大asofdate
,我希望计算列为true,否则为false。我尝试了以下但是我收到了语法错误。这样做的正确方法是什么?
select
case asofdate
when select max(asofdate) from sometable then 1
else 0
end
from sometable
或者,是否可以沿着
行获得计算列case asofdate
when END OF PREVIOUS MONTH then 1
else 0
end
答案 0 :(得分:3)
计算列是根据a计算的 可以使用其他列的表达式 在同一张桌子里。表达可以 是一个非计算列名, 常数,功能和任何 这些组合由一个连接起来 或更多运营商。 表达式不能是子查询。
所以不,你不能这样做一个计算列。
答案 1 :(得分:2)
您不能在计算列中执行此操作,因为计算列只能根据同一记录中其他列的值计算。
您可以在视图中执行此操作:
CREATE VIEW
v_with_last
AS
SELECT *, CASE asofdate WHEN MAX(asofdate) OVER () THEN 1 ELSE 0 END AS the_last
FROM sometable
很遗憾,您无法为此视图编制索引。
答案 2 :(得分:0)
在MS Sql Server中
SELECT case asofdate
WHEN (SELECT MAX(asofdate) FROM sometable) THEN 1
ELSE 0 END
FROM sometable
根据评论编辑
要结束上个月 -
SELECT DATEADD(dd,-(DAY(asofdate)),asofdate)
答案 3 :(得分:0)
所以asofdate
的最大值存储在名为sometable
的表中吗?在这种情况下,您不必使用每个记录的子查询来检查它。您可以将其存储在变量中,然后检查当前的asofdate。
declare @maxAsOfDate datetime;
Select @maxAsOfDate = max(asofdate) from sometable;
Select case when asofdate >= @maxAsOfDate then 1 else 0 end from sometable
干杯!
答案 4 :(得分:0)
我不知道这是否可行,但您可以创建一个公式为'MAX(asofdate)'的计算列,在该列上创建索引,然后创建一个仅将计算列与asofdate进行比较的视图。也许不是最好的解决方案,但可能比仅执行子查询要好一些。