[英]How to use a SQL keyword NOT as a keyword
我正在尝试转换一个数据表——我希望行成为列,列成为行(就像一个完全的数据透视表)。 我正在使用这个答案中的方法来做到这一点。
如果有什么不同,我正在使用 PHPMyAdmin 在 Raspberry Pi 上运行我自己的 SQL 服务器。
表(截断)如下所示:
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');
在部分代码中,我需要编写 WHEN 'Grant' THEN Grant 但第二个未引用的 Grant 成为关键字并与我的代码混淆。 当我将 Grant 放在单引号中时,它会在我写 ') c' 的地方引发语法错误,但我怀疑我的小作弊可能与它有关。 我该怎么办?
您似乎在暗示Grant
是一个列名——错误的选择,但您坚持使用它。 转义名称的标准方法是使用双引号:
WHEN 'Grant' THEN "Grant"
一些数据库使用反引号或方括号代替:
WHEN 'Grant' THEN `Grant`
WHEN 'Grant' THEN [Grant]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.