选择字符串子串的个数

4
我知道这应该是一个简单的选择,但我一直没有成功地找出答案。 我有一个表,其中有一个客户分组代码字段,并且我正在尝试获取每个不同字符2到6集合的计数。 在我过去的foxpro经验中,一个简单的 select distinct substr(custcode,2,5), count (*) from a group by 1
可以工作,但是在sql server查询中似乎不起作用。 错误消息指示它不喜欢在group by中使用数字引用,因此我将其更改为custcode,但是计数仅返回每个计算为1,因为我认为计数在发生不同之后所以只有一个。 如果我将计数更改为 count(distinct substring(custcode,2,5)) 并删除第一个distinct substring,则只会得到存在多少不同代码的计数。 有人能指出我在这里做错了什么吗? 谢谢。

你尝试过 count(distinct substring(custcode,2,5)), substring(custcode,2,5) 吗? - David Starkey
1个回答

6

DISTINCTGROUP 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中使用。例如,ORDER BY 1将按第一个选定的列排序,但许多人认为使用列索引是不好的习惯,使用别名/列名称更清晰易懂。

我删除了“indexes”,因为那完全是含糊不清的。请使用另一个术语,如序号位置。 - Aaron Bertrand
@AaronBertrand,你认为“序数位置”比“列索引”更常被理解吗?我可以接受措辞上的改变,但很明显OP试图在分组中使用列索引。也许只是“列编号”? - Hart CO
是的,我同意。“列号”比“列索引”更好,但我相当确定“序数位置”是不含糊的。 - Aaron Bertrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接