2014-01-29 3 views
1

У меня есть таблица, как следующийКак отобразить результат запроса в новой строке

Item Name | Date  | Previous Data | Updated Data 
Unit 1 | 1-Jul-2013 | 500   | 550 
Unit 1 | 1-Aug-2013 | 550   | 550 
Unit 1 | 1-Sep-2013 | 450   | 600 
Unit 1 | 1-Oct-2013 | 600   | 550 

Я хочу, чтобы они были отображены с помощью запроса в виде следующей

Title  | Jul | Aug | Sep | Oct 
Prev. Data| 500 | 550 | 450 | 600 
Upd. Data | 550 | 550 | 600 | 550 

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

Я использую SQL Server 2008 R2

+3

Я думаю, что вы ищете функцию поворота. – Ken

+0

Вы должны использовать SQL PIVOT ... Проверьте это ... http://www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query – tarzanbappa

ответ

0

Прежде всего, необходимо преобразовать 2 колонки [Previous Data] и [Updated Date] к строкам, а затем вы можете использовать PIVOT на Date колонке

Select col, 
[1] as Jan, 
[2] Feb, 
[3] Mar, 
[4] Apr, 
[5] May, 
[6] Jun, 
[7] Jul, 
[8] Aug, 
[9] Sep, 
[10] Oct, 
[11] Nov, 
[12] Dec 
from 
(
    select month(Date) as TMonth, col, value 
    from Table1 
    cross apply 
    (
    select 'Previous Data', [Previous Data] 
    union all 
    select 'Updated Date', [Updated Data] 
) c(col, value) 
)a 
PIVOT 
(
Sum(value) 
for Tmonth in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
)pvt 

SQL FIDDLE DEMO

+0

Thanks Praveen , Но теперь я хотел добавить еще один столбец в крайнее правое место, где он будет вычислять среднее значение за каждый квартал. Для Q1 он рассчитает среднее значение от Jan до Mac, Q2 с апреля до июня и т. Д. Не могли бы вы представить, как мне это достичь? – AmSQL

+0

Просто создайте столбец компьютера, например 'isnull ([1], 0) + isnull ([2], 0) + isnull ([3], 0) + isnull ([4], 0))/4 как Q1' – praveen

+0

Отлично! Большое спасибо! – AmSQL

0

Pls попробуйте это ........

select 'PreviousData' as Title,Jul,Aug,Sep,Oct from 
(
select a.itemname,left(datename(mm,convert(date,a.date)),3) [date] 
,a.previousdata from @tab a 
) srs 
pivot 
(
sum(previousdata) for [date] in (jul,aug,sep,oct) 
) pt 
union all 
select 'UpdatedData' as Title,Jul,Aug,Sep,Oct from 
(
select a.itemname,left(datename(mm,convert(date,a.date)),3) [date] 
,a.Updateddata from @tab a 
) srs 
pivot 
(
sum(Updateddata) for [date] in (jul,aug,sep,oct) 
) pt 
Смежные вопросы