我有一个存储过程,其中我根据一个条件选择10个cols。没有什么花哨的,只有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,则从存储过程内部调用该函数,如果位开关为1,则从存储过程内部调用一个替代函数。然而,对于一个相对简单的概念来说,这似乎是一个不寻常的工作量。
发布于 2012-03-17 04:02:50
我认为您正在寻找case语句:
select col1, .... ,
case col5 when 0 then ...
when 1 then ... ,
col6, ....
Where
...发布于 2012-03-17 03:59:17
确保quantity、quantitysold等都是表中的列,或者在需要时进行连接……
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发布于 2012-03-17 04:03:16
像这样的东西?
update table
set col10 = (case when col5 = 1 then quantity - quantitysold else quantity - quantitysold + yearlyonhand end)
where getDate between x and yhttps://stackoverflow.com/questions/9743698
复制相似问题