按别名分组

问题描述

|
SELECT COALESCE (rsu.last_name + \',\' + rsu.first_name + \' \' + rsu.middle_name + \'.\',rsu.last_name + \',\' + rsu.first_name)  as student_name,rsu.day_id
FROM roster_school_unattended rsu
GROUP BY student_name
ORDER BY rsu.day_id
不起作用。什么是最优雅的解决方法? 编辑:结果集应该有这样的东西
Muster,Hans | 2011-11-01
Muster,Hans | 2011-11-02
Williams,Clay | 2011-10-01
Williams,Clay | 2011-10-02
首先按名称分组,然后为每个名称排序。     

解决方法

编辑:整个事情都被替换了,因为对问题的最新编辑表明不需要GROUP BY ... 没有为“优雅”做任何更改...
SELECT
  rsu.last_name + \',\' + rsu.first_name + COALESCE (\' \' + rsu.middle_name + \'.\',\'\') as student_name,rsu.day_id
FROM
  roster_school_unattended  AS [rsu]
ORDER BY
  rsu.last_name + \',\'\'),rsu.day_id
可能会更改“优雅” ...
WITH formatted_rsu AS
(
  SELECT rsu.last_name + \',rsu.day_id
  FROM   roster_school_unattended  AS [rsu]
)
SELECT   student_name,day_id
FROM     formatted_rus
ORDER BY student_name,day_id
另一种可能使用APPLY ...
SELECT      formatted_rsu.student_name,rsu.day_id
FROM        roster_school_unattended  AS [rsu]
CROSS APPLY (SELECT rsu.last_name + \',\'\') as student_name) AS [formatted_rsu]
ORDER BY    formatted_rsu.student_name,rsu.day_id
    ,进行子选择将使您避免键入两次:
select t.student_name,t.day_id
from (
  select COALESCE (rsu.last_name + \',\' + rsu.first_name + \' \' + rsu.middle_name + \'.\',rsu.last_name + \',\' + rsu.first_name) as student_name,rsu.day_id
  from roster_school_unattended rsu ) t
group by t.student_name
order by t.day_id
但是day_id仍然有问题-分组子句中未包含它,因此如果不使用汇总(例如MAX),就无法选择它。     ,您可以使用子查询:
select student_name,day_id
from (SELECT COALESCE (rsu.last_name + \',\' + rsu.first_name)  as student_name,rsu.day_id
FROM roster_school_unattended rsu
) as rows
GROUP BY student_name
ORDER BY day_id
    ,我会去:
SELECT
    rsu.last_name
    + \',\' + rsu.first_name
    + COALESCE ( \' \' + rsu.middle_name + \'.\',\'\'
               )
    AS student_name,rsu.day_id
FROM
    roster_school_unattended AS rsu
ORDER BY
    rsu.last_name,rsu.first_name,rsu.middle_name,rsu.day_id
    ,
CROSS APPLY
是您为非窗口表达式加别名的朋友:
SELECT this.student_name,MAX(rsu.day_id) AS day_id
FROM roster_school_unattended rsu
CROSS APPLY (
  SELECT COALESCE (
      rsu.last_name+\',\'+rsu.first_name+\' \'+rsu.middle_name+\'.\',rsu.last_name+\',\'+rsu.first_name
    )  AS student_name
  ) this
GROUP BY this.student_name
ORDER BY this.student_name,MAX(rsu.day_id)
(假设SQL2005及更高版本)。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...