SQL查询使用带空格的Verbose别名出现分组异常,求解决方法
带空格的易读别名在SQL分组中的正确用法
当然可以使用带空格的人类可读别名,你遇到的分组异常问题,核心是分组子句中对带特殊字符的别名引用方式不符合数据库的语法规则。
不同SQL数据库对包含空格、特殊字符的标识符(包括别名)的引用规则不同,以下是主流数据库的正确写法:
MySQL/MariaDB
用反引号(`)包裹别名:
SELECT CASE WHEN PROGRAM_TYPE Is NULL THEN '' ELSE PROGRAM_TYPE END AS `Program Type` FROM T_PROGRAMS GROUP By `Program Type`;
PostgreSQL/标准SQL
用双引号(")包裹别名(注意:此时数据库会将双引号识别为标识符,而非字符串常量):
SELECT CASE WHEN PROGRAM_TYPE Is NULL THEN '' ELSE PROGRAM_TYPE END AS "Program Type" FROM T_PROGRAMS GROUP By "Program Type";
SQL Server
用方括号([])包裹别名:
SELECT CASE WHEN PROGRAM_TYPE Is NULL THEN '' ELSE PROGRAM_TYPE END AS [Program Type] FROM T_PROGRAMS GROUP By [Program Type];
如果想要跨数据库通用的写法,有两种方案可选:
- 重复SELECT中的表达式:直接在GROUP BY里使用和SELECT中完全一样的CASE逻辑
SELECT CASE WHEN PROGRAM_TYPE Is NULL THEN '' ELSE PROGRAM_TYPE END AS "Program Type" FROM T_PROGRAMS GROUP By CASE WHEN PROGRAM_TYPE Is NULL THEN '' ELSE PROGRAM_TYPE END;
- 使用子查询/CTE:先在子查询或公共表表达式中定义好别名,再在外层进行分组
WITH ProgramCTE AS ( SELECT CASE WHEN PROGRAM_TYPE Is NULL THEN '' ELSE PROGRAM_TYPE END AS "Program Type" FROM T_PROGRAMS ) SELECT "Program Type" FROM ProgramCTE GROUP By "Program Type";
内容的提问来源于stack exchange,提问作者8oris
相关产品推荐
相关产品推荐

