我正在创建一个storedprocedure,它有一个SELECT子句从一些连接表中选择多个列.对于其中一个colums,值取决于CASE的条件. SELECT DISTINCT table1.col1 as var1, table2.col2 as var2, CASE WHEN (FLOOR(table3.col3/0.2
SELECT DISTINCT table1.col1 as var1, table2.col2 as var2, CASE WHEN (FLOOR(table3.col3/0.2)*0.2) > 20 THEN 20 WHEN (FLOOR(table3.col3/0.2)*0.2) <= 20 THEN FLOOR(table3.col3/0.2)*0.2 ELSE table3.col4 -- selecting another value is the -- value in table3.col3 is null END as var3 FROM ... WHERE ...
正如你在选择中看到的那样,我做了三次FLOOR(table3.col3 / 0.2)* 0.2计算.是否可以将此计算值存储在WITHIN SELECT中的变量中,然后在条件中使用此变量?
提前致谢,
吉荣
不,你可以把它减少到2个以下的电话.但是你要做的其他任何事情都会花费更多,然后实际上这样做,因为你在那里做的非常快.当你实际上有一些繁重的操作时,你可以考虑改进的东西.这没什么.您也可以创建一个get_min函数,但我认为它不值得.有2个电话:
case when table3.col3 then table3.col4 when (FLOOR(table3.col3/0.2)*0.2) > 20 THEN 20 else FLOOR(table3.col3/0.2)*0.2 end
具有最小功能:
case when table3.col3 then table3.col4 else dbo.get_min(FLOOR(table3.col3/0.2)*0.2,20) end
作为旁注,我所指的min函数必须构建(用户定义的函数).