让我们想象一下:
我希望以优雅的方式将其转换为以下内容:
我正在使用以下查询:
SELECT empid,
sum(CASE WHEN YEAR(ordermonth) = '2014' THEN val END) '2014',
sum(CASE WHEN YEAR(ordermonth) = '2015' THEN val END) '2015',
sum(CASE WHEN YEAR(ordermonth) = '2016' THEN val END) '2016'
FROM Sales.EmpOrders
GROUP BY empid;
问题是:我可以使用哪种智能机制来手动列出案例,如果有很多案例?
答案 0 :(得分:2)
如果你需要去DYNAMIC
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(Year(ordermonth)) From sales.emporders Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select [empid],' + @SQL + '
From (
Select empid
,item = year(ordermonth)
,value = val
From sales.emporders A
) A
Pivot (sum(value) For [item] in (' + @SQL + ') ) p'
Exec(@SQL);
答案 1 :(得分:1)
这不能解答您的问题,但您可以通过不使用year()
函数来提高查询效率:
select empid,
sum(case when ordermonth >= '20140101' and ordermonth < '20150101' then val end) '2014',
sum(case when ordermonth >= '20150101' and ordermonth < '20160101' then val end) '2015',
sum(case when ordermonth >= '20160101' and ordermonth < '20170101' then val end) '2016'
from sales.emporders
group by empid;