2016-07-28 80 views
1

我有SQL Server 2008 R2。我试图将一行转换为列以获得所需格式的结果。PIVOT运算符不能在SQL Server 2008 R2中工作

表名:GenderYearWise

Year Gender Total 
--------------------- 
2005 Female 374 
2005 Male 1579 
2006 Female 853 
2006 Male 4769 

我想导致以下格式:

Gender 2005 2006 
---------------------- 
Female 374  853 
Male 1579 4769 

我尝试使用以下查询来获取所需的格式:

Select 
    Gender, 2005, 2006 
From 
    GenderYearWise 
PIVOT 
    (sum(total) 
    for year IN ([2005], [2006]) 
) AS PitvotTable 

但以上查询返回这些结果:

Gender (No column name) (No column name) 
-------------------------------------------- 
Female 2005    2006 
Male 2005    2006 

任何人都可以请帮助我,并在我的查询中确定问题?

+1

将列名称2005和2006转换为[2005],[2006]。 – Blank

回答

1

在SELECT语句中,为列名2005和2006添加转义[],如[2005], [2006]将解决该问题。

样品执行与给定的数据:

DECLARE @GenderYearWise TABLE ([Year] INT, Gender VARCHAR (100), Total INT); 

INSERT INTO @GenderYearWise ([Year], Gender, Total) VALUES 
(2005, 'Female' , 374), 
(2005, 'Male' ,1579), 
(2006, 'Female' , 853), 
(2006, 'Male' ,4769); 

Select 
    Gender, [2005], [2006] 
From 
    @GenderYearWise 
PIVOT 
    (SUM(total) 
    FOR [Year] IN ([2005], [2006]) 
) AS PitvotTable 

结果:

Gender 2005 2006 
Female 374  853 
Male 1579 4769 

同样对于保留关键字Year逸出列名。

+0

太棒了,它适合我。但为什么我们需要逃避它? – Anjum

+1

这里'Gender'是表中已知的列名。但'2005'和'2006'来自PIVOT。所以在select中如果没有用'[]'转义该列,它会认为是字符串。所以它显示的是2005年和2006年的数据值。 – Arulkumar

-2

在我的系统其工作细

选择性别,[2005],[2006]从 genderyearwise牛逼枢轴(总和(总)为一年([2005],[2006]))作为PVT