如何将SQL关键字不用作关键字

如何将SQL关键字不用作关键字,sql,mariadb,Sql,Mariadb,我试图转换一个数据表——我希望行变成列,列变成行(就像一个完整的轴)。我正在使用的方法从这样做 如果有什么不同的话,我正在使用PHPMyAdmin在Raspberry Pi上运行自己的SQL server 表(截断)如下所示: Personality|Abby|Aidan|Brandon|Bobby Agreeabl...|93 |65 |74 |68 Compassion |95 |65 |96 |96 Politeness |81 |9 |21 |

我试图转换一个数据表——我希望行变成列,列变成行(就像一个完整的轴)。我正在使用的方法从这样做

如果有什么不同的话,我正在使用PHPMyAdmin在Raspberry Pi上运行自己的SQL server

表(截断)如下所示:

Personality|Abby|Aidan|Brandon|Bobby
Agreeabl...|93  |65   |74     |68
Compassion |95  |65   |96     |96
Politeness |81  |9    |21     |12
Conscient..|45  |13   |99     |28
我试图将其转换为:

Coach  |Agreeableness|Compassion|Politeness|Conscientiousness
Abby   |93           |95        |81        |45
Aidan  |65           |96        |9         |13 
Brandon|74           |96        |21        |99
Bobby  |68           |96        |12        |28
我的问题是:

SELECT Coach,
        MAX(CASE WHEN Personality = 'Agreeableness' THEN value END) `Agreeableness`,
        MAX(CASE WHEN Personality = 'Compassion' THEN value END) `Compassion`,
        MAX(CASE WHEN Personality = 'Politeness' THEN value END) `Politeness`,
        MAX(CASE WHEN Personality = 'Conscientiousness' THEN value END) `Conscientiousness`,
        MAX(CASE WHEN Personality = 'Industriousness' THEN value END) `Industriousness`,
        MAX(CASE WHEN Personality = 'Orderliness' THEN value END) `Orderliness`,
        MAX(CASE WHEN Personality = 'Extraversion' THEN value END) `Extraversion`,
        MAX(CASE WHEN Personality = 'Enthusiasm' THEN value END) `Enthusiasm`,
        MAX(CASE WHEN Personality = 'Assertiveness' THEN value END) `Assertiveness`,
        MAX(CASE WHEN Personality = 'Neuroticism' THEN value END) `Neuroticism`,
        MAX(CASE WHEN Personality = 'Withdrawal' THEN value END) `Withdrawal`,
        MAX(CASE WHEN Personality = 'Volatility' THEN value END) `Volatility`,
        MAX(CASE WHEN Personality = 'Openness' THEN value END) `Openness`,
        MAX(CASE WHEN Personality = 'Intellect' THEN value END) `Intellect`,
        MAX(CASE WHEN Personality = 'Openness (Aspect)' THEN value END) `Openness (Aspect)`
  FROM 
(
  SELECT Personality, Coach,
         CASE Coach
            WHEN 'Abby' THEN Abby
            WHEN 'Aidan' THEN Aidan
            WHEN 'Brandon' THEN Brandon
            WHEN 'Bobby' THEN Bobby
            WHEN 'Carlos' THEN Carlos
            WHEN 'Carrie' THEN Carrie
            WHEN 'Chassidy' THEN Chassidy
            WHEN 'Emily' THEN Emily
            WHEN 'Galen' THEN Galen
            WHEN 'Gavin' THEN Gavin
            **WHEN 'Grant' THEN Grant** #part of interest
            WHEN 'Greg' THEN Greg
            WHEN 'Jack' THEN Jack
            WHEN 'Jenn' THEN Jenn
            WHEN 'Noah' THEN Noah
            WHEN 'Mae' THEN Mae
            WHEN 'Patrick' THEN Patrick
            WHEN 'Titus' THEN Titus
         END value 
    FROM table1 t CROSS JOIN
  (
    SELECT 'Abby' Coach UNION ALL
    SELECT 'Aidan' UNION ALL
    SELECT 'Brandon' UNION ALL 
    SELECT 'Bobby' UNION ALL
    SELECT 'Carlos' UNION ALL
    SELECT 'Carrie' UNION ALL
    SELECT 'Chassidy' UNION ALL
    SELECT 'Emily' UNION ALL
    SELECT 'Galen' UNION ALL
    SELECT 'Gavin' UNION ALL
    SELECT 'Grant' UNION ALL
    SELECT 'Greg' UNION ALL
    SELECT 'Jack' UNION ALL
    SELECT 'Jenn' UNION ALL
    SELECT 'Noah' UNION ALL
    SELECT 'Mae' UNION ALL
    SELECT 'Patrick' UNION ALL
    SELECT 'Titus' UNION ALL
 ) c    
) q 
 GROUP BY Coach
 ORDER BY FIELD(Coach, 'Abby', 'Aidan', 'Brandon', 'Bobby', 'Carlos', 'Carrie', 'Chassidy', 'Emily', 'Galen', 'Gavin', 'Grant', 'Greg', 'Jack', 'Jenn', 'Noah', 'Mae', 'Patrick', 'Titus');

在部分代码中,我需要在“Grant”之后再Grant时编写,但第二个不带引号的Grant会变成一个关键字,并干扰我的代码。当我把格兰特放在单引号中时,它会在我写“c”的地方进一步抛出一个语法错误,但我怀疑我的小欺骗可能与此有关。我该怎么办?

你似乎在暗示,
Grant
是一个列名——这是个糟糕的选择,但你还是坚持了。转义名称的标准方法是使用双引号:

WHEN 'Grant' THEN "Grant"
某些数据库使用反勾号或方括号:

WHEN 'Grant' THEN `Grant`
WHEN 'Grant' THEN [Grant]

请将您的查询添加到questionSample数据中,所需的结果也会有所帮助。并用正在使用的数据库进行标记。表的方向错误。你应该有同意的专栏。。。同情心等,也是教练。并为每个coach存储一行,其中包含coach名称和其他值。我不确定它是否有效,但我正在使用MariaDB,并且语法错误仍然存在。我想我会写一个关于这个问题的后续q。第一个或第二个选项应该有效。