2013-09-05 2 views
0

Я пытаюсь повернуть несколько значений в столбцы, но я не могу заставить их всех оказаться в одной строке. Я не уверен, есть ли способ просто написать сводный запрос или если что-то не так с тем, как я пытаюсь присоединиться к ним. Потому что вы, наверное, знаете лучше, чем я сам, Stackoverflow, я оставлю свои ужасные попытки и попробовать объяснить это ...Сводные данные о сводке

select 
    [CARRIAGE_ID] 
    ,[PUBLISH_FLAG] 
    ,[COUNTER_PRESCRIBED] 
    ,[ADT] AS 'ADT2008' 
    ,[AWT] AS 'AWT2008' 
    ,[AWE] AS 'AWE2008' 
    from [RISSxplr].[dbo].[ADT_MAP_FACT] 
    pivot (max([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType 
    WHERE [COUNT_YEAR] = 2008  

дает мне результат, как (образец):

CARRIAGE_ID PUBLISH_FLAG COUNTER_PRESCRIBED ADT2008 AWT2008 AWE2008 
    10041   1    P   NULL  NULL  36800 
    10041   1    P   NULL  46400 NULL 
    10041   1    P   43000  NULL  NULL 

Эти все одни и те же CARRIAGE_ID и то, что мне нужно для них, чтобы быть все в той же строке, так что бы выглядеть следующим образом:

CARRIAGE_ID PUBLISH_FLAG COUNTER_PRESCRIBED ADT2008 AWT2008 AWE2008 
    10041   1    P    43000  46400 36800 

Но я не могу показаться, чтобы это произошло. Помоги пожалуйста! И спасибо вам, как всегда.

EDIT: Я буду добавлять выборочные данные из ADT_MAP_FACT

CARRIAGE_ID COUNT_TYPE COUNT_YEAR FIGURE NUMBER_DAYS PUBLISH_FLAG COUNTER_PRESCRIBED 
    10041  ADT  2008  43000  341   1    P 
    10041  ADT  2009  43400  292   1    P 
    10041  ADT  2010  44000  314   1    P 
    10041  ADT  2011  43300  341   1    P 
    10041  ADT  2012  42700  354   1    P 
    10041  AWE  2008  36800  95   1    P 
    10041  AWE  2009  36800  81   1    P 
    10041  AWE  2010  37900  87   1    P 
    10041  AWE  2011  37000  98   1    P 
    10041  AWE  2012  36500  98   1    P 
    10041  AWT  2008  46400  192   1    P 
    10041  AWT  2009  46900  162   1    P 
    10041  AWT  2010  47100  185   1    P 
    10041  AWT  2011  46900  189   1    P 
    10041  AWT  2012  46600  198   1    P 

ответ

1

Просто нужно заполнителей и GROUP BY:

SELECT 
    [CARRIAGE_ID] 
    ,[PUBLISH_FLAG] 
    ,[COUNTER_PRESCRIBED] 
    ,MAX([ADT]) AS 'ADT2008' 
    ,MAX([AWT]) AS 'AWT2008' 
    ,MAX([AWE]) AS 'AWE2008' 
FROM [RISSxplr].[dbo].[ADT_MAP_FACT] 
PIVOT (MAX([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType 
WHERE [COUNT_YEAR] = 2008 
GROUP BY  [CARRIAGE_ID] 
      ,[PUBLISH_FLAG] 
      ,[COUNTER_PRESCRIBED] 

Демо: SQL Fiddle

+0

ваш запрос будет выдавать '10041, 1, P, NULL, NULL, 36800', вам нужно суммировать AWT_ flds! – sourcecode

+0

Хорошо, что GROUP BY, работая в скрипке выше, не работает в моей. Не уверен, что вы подразумеваете под требуемым агрегатом в полях (все еще изучая SQL по-разному), но я мог бы попробовать это! Благодаря! –

+0

Обновлено с использованием ваших данных. –

1

В группе по, отображается первая строка встречается, так что вы должны использовать агрегатную функцию (MAX/SUM), чтобы получить желаемый результат.

Попробуйте это,

select 
    [CARRIAGE_ID] 
    ,[PUBLISH_FLAG] 
    ,[COUNTER_PRESCRIBED] 
    ,sum([ADT]) AS 'ADT2008' 
    ,sum([AWT]) AS 'AWT2008' 
    ,sum([AWE]) AS 'AWE2008' 
    from [RISSxplr].[dbo].[ADT_MAP_FACT] 
    pivot (max([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType 
    WHERE [COUNT_YEAR] = 2008 
group by [CARRIAGE_ID], 
     [PUBLISH_FLAG], 
     [COUNTER_PRESCRIBED]; 

проверить эту скрипку здесь ->fiddle link

+0

То же самое, к сожалению. Он не приведет 3 значения в одну строку, и я не уверен, почему. –

+0

Угадай, что это не MySQL, поэтому вам понадобится все 3 поля в 'GROUP BY' –

+0

Простите, извините, да MSSQL, и я добавил их, но он не работает. Возможно, это то, как структурирована таблица ADT_MAP_FACT или что-то, чего я не знаю. Настоящий смущенный. –

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