3

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

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

因为它代表了group列下记录的真实分类。所以我在 SQL Server 2005 中寻找一种方法,我可以用它来获得它。

4

5 回答 5

9

使用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)
于 2013-02-01T21:06:06.470 回答
1

为什么不在选择中使用 SUBSTRING()?参考 MSDN SUBSTRING() 语法

于 2013-02-01T21:05:58.767 回答
1
SELECT
  t.id,
  t.groupcode
FROM
  (SELECT id, group, left(group,charindex('_',group)-1) as groupcode FROM table) t
GROUP BY
  groupcode
于 2013-02-01T21:08:49.277 回答
0

如何left提取组prefix

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

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

于 2013-02-01T21:10:16.727 回答
0

也许是这样的?

SELECT DISTINCT SUBSTRING(col, 1, CHARINDEX('_', col) -1)
FROM kittens
于 2013-02-01T21:08:14.213 回答