我有一个包含一些记录的表,其中一列代表每条记录的组:
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中的一个方法,我可以用它来实现。
答案 0 :(得分:3)
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