2012-03-16 113 views
0

我有一個存儲過程,其中我根據條件選擇了10個cols。沒有什麼奇特的只是SELECT col 1 - 10 WHERE date is between x and y。其中一個選定的列包含一個位開關。我希望能夠檢查該位切換,並且如果它根據一些數學給一個列賦值,或者根據一些替代數學賦值。在select語句中計算

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來處理計算,並在sproc內部調用該函數(如果位開關爲1),如果不是,則爲另一個函數。儘管這似乎是一個相對簡單的概念工作量異常。

+0

接受上一個問題的回答! – 2012-03-16 19:57:46

+1

我很抱歉我認爲我這樣做了。我已經回去並在適用的情況下完成此項工作。 – SSISPissesMeOff 2012-03-16 20:02:00

回答

0

我認爲你正在尋找case聲明:

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

確保數量,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 
+0

它們是選定列表的一部分,不需要連接。我會嘗試這個解決方案,看看它是否有效。它看起來像是什麼東西,在我的病例陳述中是我的語法。 – SSISPissesMeOff 2012-03-16 20:03:34

+0

對不起,我忘記提及正在使用的數量公式需要使用內置函數。基本上如果開關= 1數量= dailylimit - 今天銷售多少。所以像這樣: quantity = col5 - count(totalsold)today – SSISPissesMeOff 2012-03-16 20:09:17

0

像這樣?

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

我不想更新表格。基本上返回信息。唯一值得注意的是我返回的其中一列需要計算。計算取決於表中位開關的值。如果開關是真的,則返回的總數將是數量 - 數量上限(今天),否則返回的總數將是數量 - 數量上限(永久)。這是否更有意義? – SSISPissesMeOff 2012-03-16 20:20:39