在T-SQL中使SELECT复杂化

时间:2014-09-11 13:48:45

标签: sql sql-server

复杂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列应用上面的算法。

有可能吗?

由于

1 个答案:

答案 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。

查询应该会产生可预测的列数。如果没有这个,在尝试读取结果集时,最终可能会在业务逻辑中出现读取错误。