我将select列表中的列添加到order by列表中,但仍然显示错误:
如果指定了select DISTINCT,则ORDER BY项必须出现在选择列表中。
下面是存储的进程:
CREATE PROCEDURE [dbo].[GetRadioServiceCodesINGroup]
@RadioServiceGroup nvarchar(1000) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT rsc.RadioServiceCodeId,
rsc.RadioServiceCode + ' - ' + rsc.RadioService as RadioService
FROM sbi_l_radioservicecodes rsc
INNER JOIN sbi_l_radioservicecodegroups rscg
ON rsc.radioservicecodeid = rscg.radioservicecodeid
WHERE rscg.radioservicegroupid IN
(select val from dbo.fnParseArray(@RadioServiceGroup,','))
OR @RadioServiceGroup IS NULL
ORDER BY rsc.RadioServiceCode,rsc.RadioServiceCodeId,rsc.RadioService
END发布于 2008-11-05 16:11:31
试试这个:
ORDER BY 1, 2或
ORDER BY rsc.RadioServiceCodeId, rsc.RadioServiceCode + ' - ' + rsc.RadioService发布于 2008-11-05 16:13:08
试试下面的其中一种:
ORDER BY RadioServiceCodeId,RadioService
按1,2排序
只能对实际出现在DISTINCT查询结果中的列进行排序-底层数据不可用于排序。
发布于 2008-11-05 17:15:17
Distinct和Group By通常做相同的事情,出于不同的目的……它们都基于分组的列(或在Select Distinct子句中选择的列)在内存中创建一个“工作”表-然后在查询读取数据时填充该工作表,仅当这些值指示需要这样做时才添加一个新的“行”...
唯一的区别是,在Group By中,工作表中有额外的“列”用于任何计算的聚合字段,如Sum()、Count()、Avg()等,它们需要在每次读取原始行时进行更新。Distinct不需要这样做...在特殊情况下,Group By只为了获得不同的值(并且输出中没有聚合列),那么它可能是完全相同的查询计划...回顾一下这两个选项的查询执行计划并看看它做了什么是很有趣的……
当然,Distinct是一种提高可读性的方法,如果这正是您要做的(当您的目的是消除重复行,并且您没有计算任何聚合列时)
https://stackoverflow.com/questions/265628
复制相似问题