2012-03-16 15 views
0

私はストアドプロシージャを持っています。ここでは、条件に基づいて10個の列を指定しています。空想だけはSELECT col 1 - 10 WHERE date is between x and y。選択された列の1つにビットスイッチが含まれています。私はそのビットスイッチをチェックすることができるようにしたい、そして、その1が何らかの数学を基にした値を他の列に割り当てている場合は、別の数学に基づいてそれを割り当てます。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) 

です。私がマークからそんなに離れようとしているのですか?それは単純な十分なコンセプトのように思えますが、私はそれを動作させる方法がわかりません。

私の他の考えは、ビットスイッチが1の場合は計算を処理し、その関数をsproc内から呼び出すudfを作成し、そうでない場合は代替関数を作成することでした。これは、比較的単純な概念のための仕事の異常な量のように思えます。

+0

あなたが質問した前の質問に対する回答を受け入れてください。 –

+1

私の謝罪私はそうしたと思った。私は戻って、適用可能な場合はこれを行った。 – SSISPissesMeOff

答えて

0

を数量、quantitysoldなどは表の列であるか、必要に応じて参加するかということを確認してください:

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

私はあなたがcase声明を探しているのだと思う...

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

+0

申し訳ありません使用されている数式が組み込み関数を利用する必要があることは忘れています。基本的にスイッチ= 1数量=デイリーライト - 今日売られた数。だから何かのように: 数量= col5 - カウント(totalsold)今日 – SSISPissesMeOff

0

このようなもの?

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

私はテーブルを更新するつもりはありません。基本的に情報を返します。唯一の副注釈は、返されている列の1つを計算する必要があることです。計算は、表のビットスイッチの値に依存します。スイッチが真の場合、返される合計はquantity - quantitysold(今日)、そうでない場合は返される合計がquantity-quantitysold(永遠)になります。それは理にかなっていますか? – SSISPissesMeOff

関連する問題