Функция SQL, выбор конкретного столбца по параметру - PullRequest
1 голос
/ 11 марта 2012

У меня есть таблица, которая выглядит так

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

каждая представляет числовой кулон, и я хочу получить значение в определенном столбце, которое определяется значением, переданным функции.

У меня есть эта функция

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

Например, если я выполню функцию сегодня и отправлю год и месяц сегодня, она вернет значение в столбце "mar".

1 Ответ

0 голосов
/ 11 марта 2012

Вы можете использовать UNPIVOT, если оно доступно в вашей версии SQL Server (доступно начиная с SQL Server 2005):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...