我知道这必须是一个简单的选择,但我没有运气搞清楚。我有一个表有一个客户分组代码字段,我正在尝试计算每个不同的字符2到6集。在我过去的foxpro体验中简单
select distinct substr(custcode,2,5), count (*) from a group by 1
可以工作,但这似乎不适用于SQL Server查询。错误消息表明它不喜欢使用组中的数字引用,所以我将其更改为custcode,但计数只返回1,因为我假设计数是在发生不同之后所以只有一个。如果我将计数更改为count(distinct substring(custcode,2,5))
并删除第一个不同的子字符串,我只计算存在多少个不同的代码。谁能指出我在这里做错了什么?感谢。
答案 0 :(得分:4)
DISTINCT
和GROUP BY
是多余的,您只需要GROUP BY
,并且您希望GROUP BY
选择相同的内容:
select substr(custcode,2,5), count (*)
from a
group by substr(custcode,2,5)
在SQL Server中,您可以在ORDER BY
子句中使用列别名/数字,但不能在GROUP BY
中使用。
IE中。 ORDER BY 1
将按第一个选定列排序,但许多人认为使用列索引是不好的做法,使用别名/列名更清楚。