mssql order rows order by asc for all rows but last 两行

mssql order rows order by asc for all rows but last two rows

需要 order by after union 的帮助

select sno,measurement from measurementTable union all select '' as sno,avg(measurement) as 
measurement from measurementTable union all select '' as sno,
max(measurement)-min(measurement) from measurementTable;

我需要在数据网格底部显示平均值,但按 sno 升序排列所有其他 mssql 服务器 table 行 我尝试在 union all 之前使用 order by 并得到错误

select sno,measurement from measurementTable order by sno asc union all select '' as sno,
avg(measurement) as measurement from measurementTable union all select '' as sno,
max(measurement)-min(measurement) from measurementTable;

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'union'.

是否可以在 union all 之前使用 order by?

在查询末尾添加 Order by 它将应用于整个结果

SELECT *
FROM   (SELECT Cast(sno AS VARCHAR(20)) as sno,
               measurement
        FROM   measurementTable
        UNION ALL
        SELECT ''               AS sno,
               Avg(measurement) AS measurement
        FROM   measurementTable
        UNION ALL
        SELECT '' AS sno,
               Max(measurement) - Min(measurement)
        FROM   measurementTable) A
ORDER  BY CASE WHEN sno = '' THEN 1 ELSE 0 END ASC,sno 

sno 转换为 varchar 以避免隐式转换为 integer

注意: 如果您可以添加示例数据和预期结果,我确定可以使用 ROLLUP

简化查询

只需在查询末尾使用

order by sno