Вы не указали, какие РСУБД вы используете. Вы можете поворота данных во всех базах данных с использованием агрегатной функции с CASE
выражения:
select id, name,
sum(case when month = 'December2012' then "count" end) December2012,
sum(case when month = 'January2013' then "count" end) January2013
from yourtable
group by id, name
См SQL Fiddle with Demo
Если вы используете SQL Server 2005+ или Oracle 11g, то вы можете использовать функцию PIVOT
:
select *
from
(
select id, name, month, [count]
from yourtable
) src
pivot
(
sum([count])
for month in (December2012, January2013)
) piv
См. SQL Fiddle with Demo.
В SQL Server, если значения month
неизвестны, то вы можете использовать динамический SQL, похожее на это:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(month)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT id, name,' + @cols + ' from
(
select id, name, month, [count]
from yourtable
) x
pivot
(
sum([count])
for month in (' + @cols + ')
) p '
execute(@query)
См SQL Fiddle with Demo
Все версии дают результат:
| ID | NAME | DECEMBER2012 | JANUARY2013 |
-------------------------------------------
| 1 | David | 500 | 400 |
| 2 | Rob | 320 | 280 |
Какие СУБД вы используете? –
[Что вы пробовали?] (Http://whathaveyoutried.com) –