如何将SQL关键字不用作关键字
我试图转换一个数据表——我希望行变成列,列变成行(就像一个完整的轴)。我正在使用的方法从这样做 如果有什么不同的话,我正在使用PHPMyAdmin在Raspberry Pi上运行自己的SQL server 表(截断)如下所示:如何将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 |
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。第一个或第二个选项应该有效。