2012-03-30 152 views
2

需要数据库透视中的错误帮助。我已经表驯服table_score象下面这样:数据透视表sql

|ID | Subject | Score| 
---------------------- 
|001 | 2GSLIG | 80 | 
|001 | 3ECITI | 70 | 
|002 | 2GSLIG | 75 | 
|002 | 3ECITI | 85 | 
----------------------- 

那么就应该pivotted到

|ID | 2GSLIG | 3ECITI | 
----------------------- 
|001| 80 | 70 | 
|002| 85 | 75 | 
----------------------- 

我的代码是

SELECT 
    ID, 
    [2GSLIG] AS 2GSLIG, 
    [3ECITI] AS 3ECITI 
FROM 
    (SELECT 
    ID, 
    Subject, 
    Score 
    FROM 
    table_score) ps 
PIVOT 
(SUM (Score) 
    FOR Subject IN ([2GSLIG], [3ECITI])) AS pvt 

,它仍然错误

#1064 - You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use 
near '[ 2GSLIG ] AS 2GSLIG , [ 3ECITI ] AS 3ECITI FROM (SELECT ID , 
Subject , Score F' at line 1 

我我对此感到困惑,需要 请帮助。谢谢。

+1

你有没有混合MySQL和MS SQL服务器? – Devart 2012-03-30 12:15:51

+0

我在这里使用内置的MySQL – charcoalite 2012-03-30 13:00:12

回答

3

怎么样 -

SELECT 
    ID, 
    SUM(IF(Subject = '2GSLIG', Score, 0)) AS `2GSLIG`, 
    SUM(IF(Subject = '3ECITI', Score, 0)) AS `3ECITI` 
FROM table_score 
GROUP BY ID 
+0

它没有遇到错误,但返回的值不是实际值,所有值都保持为1,如下图所示。有人可以告诉我吗? '| ID | 2GSLIG | 3ECITI |' '-----------------------' '| 001 | 1 | 1 |' '| 002 | 1 | 1 |' '-----------------------' – charcoalite 2012-03-30 12:55:04

+0

我很懒,没有正确地读你的问题。现在就试试。 – nnichols 2012-03-30 13:06:48

+0

非常感谢你的工作。 – charcoalite 2012-03-30 13:10:53

2

您似乎忘记了 '' 各地2GSLIG和2ECITI在你的别名

SELECT ID, [2GSLIG] AS '2GSLIG', [3ECITI] AS '3ECITI' 
FROM (SELECT ID, Subject, Score FROM table_score) AS ps PIVOT (SUM (Score) FOR Subject IN ([2GSLIG], [3ECITI])) AS pvt 
+0

是的,我做到了,但仍然遇到错误 – charcoalite 2012-03-30 12:59:41