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