5

以下の形式でデータを取得する SQL クエリがあります。

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

ここで私を助けてください!. さらに情報が必要な場合はお知らせください。

4

5 に答える 5

6

これは、PIVOT を使用して実行できます。年をハードコーディングする静的 PIVOT、またはクエリの実行時に年のリストを作成する動的 PIVOT のいずれかです。

静的ピボット:

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

これは、例を含むSQLフィドルです

動的ピボット:

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)

どちらも同じ結果になります。

于 2012-05-23T18:32:29.273 に答える
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 Ranaが提案したように、またはピボット

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
于 2012-05-23T08:10:34.120 に答える
-1
select sum("Total Hours") as "Total Hours", Year 
from tablename 
group by Year

この単純なクエリにより、目的の出力が得られます。

于 2012-05-23T07:40:38.840 に答える