select语句中的计算

时间:2012-03-16 19:55:22

标签: sql stored-procedures select

我有一个存储过程,我根据条件选择10个col。没有什么可以只是SELECT col 1 - 10 WHERE date is between x and y。其中一个选定列包含一个位开关。我希望能够检查该位切换,如果它的1根据某些数学分配一个值,则根据一些备用数学分配。

SELECT col1...col10 
FROM table a
WHERE getDate is BETWEEN x AND y

IF col5 = 1 THEN
   col10 = quantity - quantitysold
ELSE
   col10 = quantity - SUM(quantitysold, yearlyonhand) 

是基本的想法。我试图这么做的是什么?它似乎是一个简单的概念,我只是不确定如何使它工作。

我的另一个想法是创建一个处理计算的udf,如果位开关为1,则从sproc内部调用该函数,否则调用另一个函数。对于一个相对简单的概念,这似乎是一种异常的工作量。

3 个答案:

答案 0 :(得分:0)

确保数量,数量等等是表中的列,或者根据需要进行连接...

SELECT
    col1...,
    CASE
        WHEN col5 = 1 THEN quantity - TotalSoldToday
        ELSE quantity - (TotalSoldToday + yearlyonhand) 
    END AS col10 
LEFT JOIN
(
    SELECT
        Sum(Quantity) as TotalSoldToday
    FROM
        table a
    WHERE
        Convert(Date, DateColumn) = Convert(Date, GETDATE())
) T on 1 = 1
FROM
    table a
WHERE
    DateColumn is BETWEEN x AND y

答案 1 :(得分:0)

我认为你正在寻找case声明:

select col1, .... , 
      case col5 when 0 then ... 
                when 1 then ... , 
       col6, .... 
Where
   ...

答案 2 :(得分:0)

这样的事情?

update table
set col10 = (case when col5 = 1 then quantity - quantitysold else quantity - quantitysold + yearlyonhand end)
where getDate between x and y