我有一个存储过程,我根据条件选择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内部调用该函数,否则调用另一个函数。对于一个相对简单的概念,这似乎是一种异常的工作量。
答案 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