2016-05-26 5 views
0

Как я могу повернуть столбец с датами, который является MONTH в качестве параметра?PIVOT с выбранным MONTH()

Пример:

данных:

|-----------------------------------| 
| def_kstnr | def_zeit | def_datum | 
|-----------------------------------| 
| 100  | 3.2  | 2011-11-02 | 
| 110  | 2.8  | 2011-02-03 | 
| 120  | 5.4  | 2011-11-04 | 
| 130  | 2.4  | 2011-08-05 | 
| 140  | 4.9  | 2011-09-06 | 
| 150  | 1.5  | 2011-10-07 | 
| 160  | 2.6  | 2011-12-08 | 
|-----------------------------------| 

Запрос:

SELECT 
    def_kstnr, 
    [1] AS Jan, 
    [2] AS Feb, 
    [3] AS Mrz, 
    [4] AS Apr, 
    [5] AS Mai, 
    [6] AS Jun, 
    [7] AS Jul, 
    [8] AS Aug, 
    [9] AS Sep, 
    [10] AS Okt, 
    [11] AS Nov, 
    [12] AS Dez 
FROM 
(Select 
def_kstnr, 
def_zeit, 
MONTH(def_datum) as TMonth 
    from 
    dbo.def) source 
PIVOT 
(
    SUM(def_zeit) 
    FOR TMonth 
    IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
) AS pvtMonth 

Результат должен выглядеть следующим образом, если параметр месяца = 2 (февраль):

| def_kstnr | Feb | 
    110   2.8 

и если параметр месяца = 11 (ноябрь)

| def_kstnr | Nov | 
    100   3.2 

Я уже прибегая к помощи, но я не знаю, что это ключевое слово для этого моего дела. Я еще не нашел его. Спасибо ..

+0

Вам нужно будет использовать динамический SQL - любой конкретный запрос всегда создает набор результатов с фиксированной «формой» - количеством столбцов, их * именами и типами. С другой стороны, изменение заголовка столбца в * приложении * или * отчете * обычно тривиально - это нужно сделать в * SQL *? –

+0

Какова ваша СУБД? –

ответ

0

Если вы используете SQL Server, вы можете создать динамический SQL, как этот

DECLARE @Month Int = 11, 
     @MonthName VARCHAR(20), 
     @Sql NVARCHAR(MAX) 

SET  @MonthName = CONVERT(VARCHAR(3), DATEADD(Month, @Month, -1), 107) 
SET  @Sql = N' SELECT def_kstnr, 
          def_zeit AS ' + QUOTENAME(@MonthName) + ' 
        FROM DataTable 
        WHERE MONTH([def_datum]) = @Month' 

EXEC sp_executesql @Sql, N'@Month INT', @Month = @Month 

Вы можете добавить свой SUM(def_zeit) и GROUP BY def_kstnr в динамическом SQL, если это результат вы после .. сложно сказать по вашему ожидаемому результату

Смежные вопросы