如何在年份和-1年的列中编写查询let值?

时间:2018-07-16 08:36:19

标签: sql sql-server

我有一个带有此表的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    |

有什么建议吗? 谢谢

4 个答案:

答案 0 :(得分:2)

您可以将CASE WHENMAX功能一起使用。

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

sqlfiddle

答案 1 :(得分:2)

您拥有数据中心数据!

SELECT id, [2014], [2015]
FROM YourTable AS Dt
PIVOT (MAX(Data) FOR Year IN ([2014], [2015])) AS PVT

请参阅:Using PIVOT and UNPIVOT

答案 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