2013-12-13 5 views
1

В таблице у меня есть, как это:Удалить ненужные столбцы Pivot в SQL Server

CEID BUID WEIGHT TREND SCORE Quarter 
--------------------------------------- 
CE001 BU001 4  5  20  1 
CE001 BU001 4  0  22  2 
CE001 BU001 4  0  23  3 
CE001 BU001 4  0  24  4 

Результат я хочу, как этот

CEID BUID WEIGHT TREND Q1 Q2 Q3 Q4 
--------------------------------------- 
CE001 BU001 4  NA 20 22 23 24 

я написал следующую сводную запрос:

select * 
from table 
pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter 

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

Как достичь результата, показанного выше? т.е.: удалить столбец тренда из запроса в целом.

ответ

1

Просто прекратить использование SELECT * от основной таблицы, и оставить из колонки ТЕНДЕНЦИЯ:

;WITH t AS 
(
    select CEID, BUID, WEIGHT, SCORE, Quarter from dbo.table 
) 
SELECT * FROM t 
pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter; 

Если вы хотите TREND = NA, как показано в вашем «результат я хочу», только жесткий Исходный код:

;WITH t AS 
(
    select CEID, BUID, WEIGHT, TREND = 'NA', SCORE, Quarter from dbo.table 
) 
SELECT * FROM t 
pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter; 
+0

Спасибо .. Так нужна временная таблица. – Haswell

+0

@eyeanand нет, здесь нет временной таблицы. Это общее табличное выражение (CTE). Вы также можете сделать это с помощью подзапроса/производной таблицы. –

+0

ok..but не является CTE своего рода временным хранилищем, которое гаснет, как только его использование закончено .... у меня появилась идея для запроса ... также я хотел вставить результат запроса в таблицу поэтому там синтаксис CTE создавал проблемы, поэтому я создал временную таблицу и использовал опорную точку в этой таблице ... в любом случае у меня есть идея, которую вы поделили. – Haswell