2012-05-23 5 views
3

У меня есть SQL-запрос, который возвращает данные в следующем формате;Создать столбцы из строк в SQL Server

Total Hours Year 
    100.00  2012 
    200.00  2012 
    300.00  2012 
    75.00  2011 
    150.00  2011 
    50.00  2010 
    125.00  2010 

Мне нужно суммировать общее количество часов и принести результат в виде;

2012 2011 2010 
600 225 175 

Пожалуйста, помогите мне здесь !. Дайте мне знать, если вам нужна дополнительная информация.

ответ

0

а. вы, возможно, получаете данные так или иначе, но, возможно, это поможет:

select sum(p.TotalHours), p.Year From someTable p 
    GROUP BY p.Year 

b. вы должны сделать некоторую логику для создания столбцов в строках и против

-1
select sum("Total Hours") as "Total Hours", Year 
from tablename 
group by Year 

Этот простой запрос даст вам желаемый результат.

0

Вы можете использовать SQL группировкиhttp://www.w3schools.com/sql/sql_groupby.asp

select 
    [Year], 
    SUM([Hours]) as HoursByYear 
from 
    #table 
group by 
    [Year] 

результат:

Year HoursByYear 
    2010 175 
    2011 225 
    2012 600 

или поворота, как Pranay Рана предложил

select 
    [2010], [2011], [2012] 
from 
    (select [YEAR], [Hours] 
     from #table) AS SourceTable 
    pivot 
    (
     sum([Hours]) 
     for [Year] IN ([2010], [2011], [2012]) 
    ) as PivotTable 

Результат:

2010 2011 2012 
175  225  600 
3

Вы можете выполнить это с PIVOT, либо статический PIVOT, где жесткий код годы или динамический PIVOT, где вы создаете список лет при выполнении запроса:

Static ОСИ:

create table table1 
(
    totalhours decimal(10, 2), 
    year int 
) 

insert into table1 values(100, 2012) 
insert into table1 values(200, 2012) 
insert into table1 values(300, 2012) 
insert into table1 values(75, 2011) 
insert into table1 values(150, 2011) 
insert into table1 values(50, 2010) 
insert into table1 values(125, 2010) 

select * 
from 
(
    select * 
    from table1 
) x 
pivot 
(
    sum(totalhours) 
    for year in ([2012], [2011], [2010]) 
) p 

Here is a SQL Fiddle with an example

Dynamic Pivot:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX); 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.year) 
      FROM table1 c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT ' + @cols + ' from 
      (
       select totalhours, year 
       from table1 
      ) x 
      pivot 
      (
       sum(totalhours) 
       for year in (' + @cols + ') 
      ) p ' 


execute(@query) 

Оба дадут вам те же результаты.

+0

+1 для включения динамического стержня – wickedone

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