首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >select语句中的计算

select语句中的计算
EN

Stack Overflow用户
提问于 2012-03-17 03:55:22
回答 3查看 304关注 0票数 0

我有一个存储过程,其中我根据一个条件选择10个cols。没有什么花哨的,只有SELECT col 1 - 10 WHERE date is between x and y。所选列之一包含位开关。我希望能够检查位开关,如果它是1,则根据某些数学将值赋给列,否则,将根据某些交替数学赋值。

代码语言:javascript
复制
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,则从存储过程内部调用一个替代函数。然而,对于一个相对简单的概念来说,这似乎是一个不寻常的工作量。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-17 04:02:50

我认为您正在寻找case语句:

代码语言:javascript
复制
select col1, .... , 
      case col5 when 0 then ... 
                when 1 then ... , 
       col6, .... 
Where
   ...
票数 0
EN

Stack Overflow用户

发布于 2012-03-17 03:59:17

确保quantity、quantitysold等都是表中的列,或者在需要时进行连接……

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2012-03-17 04:03:16

像这样的东西?

代码语言:javascript
复制
update table
set col10 = (case when col5 = 1 then quantity - quantitysold else quantity - quantitysold + yearlyonhand end)
where getDate between x and y
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9743698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档