我有一个带有此表的SQL Server 2008数据库:
id | Data | OtherData | Year |
-----+--------+----------------+-------
001AA | 156540 | 195896 | 2014
405BB | 111342.54 | 79263 | 2014
001AA | 42550 | 216417 | 2015
056CC | 26900 | 352194 | 2014
023DD | 23524 | 139124 | 2014
023DD | 21659.80 | 108143 | 2015
405BB | 111212.65 | 111449 | 2015
056CC | 64871.95 | 541478 | 2015
我想要这样:
id | Data 2014 | Data 2015 |
-----+------------+-------------+-
001AA | 156540 | 42550 |
405BB | 111342.54 | 111212.65 |
056CC | 26900 | 64871.95 |
023DD | 23524 | 21659.80 |
有什么建议吗? 谢谢
答案 0 :(得分:2)
您可以将CASE WHEN
与MAX
功能一起使用。
SELECT id,
MAX(case when [Year]= '2014' then Data end) as 'Data 2014',
MAX(case when [Year]= '2015' then Data end) as 'Data 2015'
FROM T
GROUP BY id
答案 1 :(得分:2)
您拥有数据中心数据!
SELECT id, [2014], [2015]
FROM YourTable AS Dt
PIVOT (MAX(Data) FOR Year IN ([2014], [2015])) AS PVT
答案 2 :(得分:2)
使用pivot
Select id, max([2014]) as [Data 2014], max([2015]) as [Data 2015] from tbl as tm
pivot (max(data) for [year] in ([2014],[2015])) as pvt
group by id
编辑:
您需要为此进行动态查询。
declare @myYear as smallint;
declare @myYearN_1 as smallint;
set @myYear = 2015;
set @myYearN_1 = 2014;
Set @query = 'Select id, max(' + @myYear +') as [Data_N], max(' + @myYearN_1 + ') as [Data N-1] from tbl as tm
pivot (max(data) for [year] in (' + @myYear,@myYearN_1 + ')) as pvt
group by id'
execute(@query)
答案 3 :(得分:0)
我想对参数使用 pivot ,但它会出错:错误消息:无法从nvarchar转换为smallint ...在PIVOT运算符中指定了错误的值“ @myYear”。
declare @myYear as smallint;
declare @myYearN_1 as smallint;
set @myYear = 2015;
set @myYearN_1 = 2014;
Select id, max(@myYear) as [Data N], max(@myYearN_1) as [Data N-1] from [tbl] as tm
pivot (max(data) for [year] in ([@myYear],[@myYearN_1])) as pvt
group by id