首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果指定了select DISTINCT,则ORDER BY项必须出现在选择列表中

如果指定了select DISTINCT,则ORDER BY项必须出现在选择列表中
EN

Stack Overflow用户
提问于 2008-11-05 16:08:52
回答 5查看 196.5K关注 0票数 81

我将select列表中的列添加到order by列表中,但仍然显示错误:

如果指定了select DISTINCT,则ORDER BY项必须出现在选择列表中。

下面是存储的进程:

代码语言:javascript
复制
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
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-05 16:11:31

试试这个:

代码语言:javascript
复制
ORDER BY 1, 2

代码语言:javascript
复制
ORDER BY rsc.RadioServiceCodeId, rsc.RadioServiceCode + ' - ' + rsc.RadioService
票数 71
EN

Stack Overflow用户

发布于 2008-11-05 16:13:08

试试下面的其中一种:

  1. 使用列别名:

ORDER BY RadioServiceCodeId,RadioService

  • Use列位置:

按1,2排序

只能对实际出现在DISTINCT查询结果中的列进行排序-底层数据不可用于排序。

票数 15
EN

Stack Overflow用户

发布于 2008-11-05 17:15:17

Distinct和Group By通常做相同的事情,出于不同的目的……它们都基于分组的列(或在Select Distinct子句中选择的列)在内存中创建一个“工作”表-然后在查询读取数据时填充该工作表,仅当这些值指示需要这样做时才添加一个新的“行”...

唯一的区别是,在Group By中,工作表中有额外的“列”用于任何计算的聚合字段,如Sum()、Count()、Avg()等,它们需要在每次读取原始行时进行更新。Distinct不需要这样做...在特殊情况下,Group By只为了获得不同的值(并且输出中没有聚合列),那么它可能是完全相同的查询计划...回顾一下这两个选项的查询执行计划并看看它做了什么是很有趣的……

当然,Distinct是一种提高可读性的方法,如果这正是您要做的(当您的目的是消除重复行,并且您没有计算任何聚合列时)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/265628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档