2012-03-11 7 views
1

によって特定の列を選択し、私はそのSQL関数、パラメータ

projectID , year , jan , feb , mar , apr , may .... 

各1表すとき、数値coulm のように見えるテーブルを持っていると私は値によって決定特定のcolumsでの値を取得したいですその機能に送った。

私は今日関数を実行し、今日の年と月を送信する場合、それは「傷」列の値を返します。この関数に例えば

CREATE FUNCTION [dbo].[func_] 
( @BRANCH_ID  NUMERIC(6,0) = 0, 
    @JOB_TYPE_ID NUMERIC(6,0) = 0, 
    @PROJECT_ID  NUMERIC(6,0) = 0, 
    @MONTH_NAME  varchar(10) = 0,  
    @YEAR_NUMBER NUMERIC(6,0) = 0) 
RETURNS NUMERIC(6,1) 
AS 
BEGIN 
    DECLARE @FORCAST NUMERIC(6,1) 

    SELECT @FORCAST = @MONTH_NAME 
    FROM TABLE 
    WHERE Projectid = @PROJECT_ID         
      AND Year = @YEAR_NUMBER 

    IF @FORCAST IS NULL 
     RETURN(0) 

    RETURN(@FORCAST) 
END 

を持っています。

+1

あなたはでしたサンプルデータを追加し、関数の使用例は? – Andomar

答えて

0

それはSQL Serverのバージョンで利用できる場合は、(それがSQL Server 2005のから始まる利用可能です)UNPIVOTを使用することができます。

SELECT @FORCAST = Forecast 
FROM [TABLE] t 
UNPIVOT (
    Forecast FOR Month IN (jan, feb, mar, ...) 
) u 
WHERE Projectid = @PROJECT_ID 
    AND Year  = @YEAR_NUMBER 
    AND Month  = LEFT(@MONTH_NAME, 3) 

そうでない場合は、このようなものが考えられます。

SELECT 
    @FORCAST = CASE @MONTH_NAME 
    WHEN 'January' THEN jan 
    WHEN 'February' THEN feb 
    WHEN 'March' THEN mar 
    ... 
    END 
FROM [TABLE] 
WHERE Projectid = @PROJECT_ID 
    AND Year  = @YEAR_NUMBER 
+0

すごく感謝しました – Betite

関連する問題