2
ID    Amount      Date
------------------------------
 1    300     02-02-2010 00:00
 2    400     02-02-2009 00:00
 3    200     02-02-2011 00:00
 4    300     22-02-2010 00:00
 5    400     12-02-2009 00:00
 6    500     22-02-2009 00:00
 7    600     02-02-2006 00:00
 8    700     02-07-2012 00:00
 9    500     08-02-2012 00:00
10    800     09-02-2011 00:00
11    500     06-02-2010 00:00
12    600     01-02-2011 00:00
13    300     02-02-2019 00:00

必要な出力:

   Y1          Y2            Y3 ...........
 sum(amount)   sum(amount)   sum(amount)

Y1が日付の年の部分であり、結果の列が次のようになるアプローチとは何ですか?

 2006   2009    2010   2011   2012
 ---------------------------------
  600   1300     800   1900   1200

データベースシステム:SQL Server 2008

4

1 に答える 1

0

動的テーブルを使用する必要がありますPIVOT

DECLARE @Years nvarchar(max)
SELECT @Years =
  STUFF(
  (
    select distinct ',[' + cast(Year([date]) as nvarchar(4)) + ']'
    from YOUR_TABLE_NAME_HERE
    for xml path('')
  ),
  1,1,'')

DECLARE @SQL nvarchar(max)
SELECT @SQL = N'
select
  *
from (
  select
    amount, year([date]) as [y]
  from YOUR_TABLE_NAME_HERE
) Data
PIVOT (
  sum(amount)
  FOR [y]
  IN (
    ' + @Years + '
  )
) PivotTable
'

EXECUTE (@SQL)

参照:PIVOTドキュメント

于 2012-07-07T09:55:16.080 に答える