复杂SELECT
嗨,我正在使用SQL 2012和T-SQL
我有一个大数据表中的所有数字列: imp2012,imp2013,imp2014,st2012,st2013,st2014,coltot
列(imp2012,imp2013,imp2014)具有值,但列(st2012,st2013,st2014)具有cero值,其最终值取决于coltot和imp2012,imp2013,imp2014列,因此,&#34的实际值; ST"列是:
if coltot > imp2014
st2014 = imp2014
vartemp = coltot - imp2014
if vartemp > imp2013
st2013 = imp2013
vartemp = vartemp - imp2013
if vartemp > imp2012
st2012 = imp2012
else
st2012= vartemp
else
st2013=vartemp
else
st2014 = coltot
我需要cosntruc一个SELECT填充st2012,st2013,st2014列应用上面的算法。
有可能吗?
由于
答案 0 :(得分:0)
Select
Case When coltot > imp2014
Then imp2014
Else coltot
End As st2014,
Case When (((coltot - imp2014) > imp2013) AND (coltot > imp2014))
Then imp2013
When coltot > imp2014
Then coltot - imp2014
Else Null
End As st2013,
Case (((coltot - imp2014 - imp2013) > imp2012) AND (coltot > imp2014 + imp2013))
Then imp2012
When (((coltot - imp2014) > imp2013) AND (coltot > imp2014))
Then coltot - imp2014 - imp2013
Else Null
End As st2012,
coltot, imp2014, imp2013, imp2012
关于初始逻辑的重要注意事项是SQL并不真正支持这种思维方式。你的if语句实际上是创建一个动态select语句。如果第一个条件失败,那么如果第二个条件失败,您将只选择st2014,您将只选择st2014和st2013。
查询应该会产生可预测的列数。如果没有这个,在尝试读取结果集时,最终可能会在业务逻辑中出现读取错误。