通过substring分组sql结果

时间:2013-02-01 21:01:23

标签: sql sql-server-2005

我有一个包含一些记录的表,其中一列代表每条记录的组:

id  | group
1     abc_xxx
2     abc_yyy
3     def_ooo
4     def_ppp
5     ghi_jjj
6     ghi_kkk

当我进行查询并按组列对行进行分组时,我得到了

abc_xxx
abc_yyy
def_ooo
def_ppp
ghi_jjj
ghi_kkk

然而,这不是我需要的正确输出,我需要得到类似的东西:

abc
def
ghi

因为它代表组列下记录的真实分类。所以我正在寻找SQL Server 2005中的一个方法,我可以用它来实现。

5 个答案:

答案 0 :(得分:3)

使用SUBSTRINGLEFT(更简单但非标准):

SELECT
    SUBSTRING([group], 1, 3) AS [group]
FROM table
GROUP BY 
    SUBSTRING([group], 1, 3)

或者,

SELECT
    LEFT([group], 3) AS [group]
FROM table
GROUP BY 
    LEFT([group], 3)

分组时通常会聚合某些东西,所以我猜你正在寻找类似的东西:

SELECT
    SUBSTRING([group], 1, 3) AS [group],
    COUNT(*) AS [count]
FROM table
GROUP BY 
    SUBSTRING([group], 1, 3)

答案 1 :(得分:1)

为什么不在选择中使用SUBSTRING()?请参阅MSDN SUBSTRING() Syntax

答案 2 :(得分:0)

也许是这样的?

SELECT DISTINCT SUBSTRING(col, 1, CHARINDEX('_', col) -1)
FROM kittens

答案 3 :(得分:0)

SELECT
  t.id,
  t.groupcode
FROM
  (SELECT id, group, left(group,charindex('_',group)-1) as groupcode FROM table) t
GROUP BY
  groupcode

答案 4 :(得分:0)

left如何提取群组prefix

SELECT LEFT([group], 3) AS grp
FROM table
GROUP BY LEFT([group], 3);

注意:请尽量避免为列名使用保留关键字:例如: group