【问题标题】:PIVOT operator not working in SQL Server 2008 R2PIVOT 运算符在 SQL Server 2008 R2 中不起作用
【发布时间】:2016-07-28 06:03:05
【问题描述】:

我有 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

谁能帮我找出我查询中的问题?

【问题讨论】:

  • 将列名 2005 和 2006 转义为 [2005]、[2006]。

标签: sql sql-server database sql-server-2008-r2


【解决方案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 转义列名。

【讨论】:

  • 太棒了,它对我有用。但是为什么我们需要逃避它呢?
  • 这里Gender 是表中已知的列名。但是20052006 是从 PIVOT 派生的。因此,在选择中,如果没有使用[] 转义列,它将被视为字符串。所以它显示 2005 和 2006 是数据值。
【解决方案2】:

它在我的系统中运行良好

选择性别,[2005],[2006] from genderyearwise t pivot( sum(total) for year in ([2005],[2006])) as pvt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多