我正在尝试对别名列执行分组操作(下面的示例),但无法确定正确的语法.
SELECT LastName + ', ' + FirstName AS 'FullName' FROM customers GROUP BY 'FullName'
什么是正确的语法?
进一步扩展问题(我没想到我收到的答案)解决方案是否仍然适用于CASEed别名列?
SELECT CASE WHEN LastName IS NULL THEN FirstName WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName END AS 'FullName' FROM customers GROUP BY LastName, FirstName
答案是肯定的,它仍然适用.
您传递要分组的表达式而不是别名
SELECT LastName + ', ' + FirstName AS 'FullName' FROM customers GROUP BY LastName + ', ' + FirstName
这就是我的工作.
SELECT FullName FROM ( SELECT LastName + ', ' + FirstName AS FullName FROM customers ) as sub GROUP BY FullName
此技术以直接的方式应用于"编辑"方案:
SELECT FullName FROM ( SELECT CASE WHEN LastName IS NULL THEN FirstName WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName END AS FullName FROM customers ) as sub GROUP BY FullName
不幸的是你不能在GROUP BY语句中引用你的别名,你必须再次编写逻辑,这看起来很神奇.
SELECT LastName + ', ' + FirstName AS 'FullName' FROM customers GROUP BY LastName + ', ' + FirstName
或者,您可以将select放入子选择表或公用表表达式,之后您可以对列名称进行分组(不再是别名.)
抱歉,使用MS SQL Server是不可能的(虽然使用PostgreSQL可能):
select lastname + ', ' + firstname as fullname from person group by fullname
否则只需使用:
select x.fullname from ( select lastname + ', ' + firstname as fullname from person ) as x group by x.fullname
或这个:
select lastname + ', ' + firstname as fullname from person group by lastname, firstname -- no need to put the ', '
上面的查询更快,首先对字段进行分组,然后计算这些字段.
以下查询较慢(它尝试首先计算选择表达式,然后根据该计算对记录进行分组).
select lastname + ', ' + firstname as fullname from person group by lastname + ', ' + firstname