sql - 按子字符串对sql结果进行分组

标签 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 中寻找一种方法,我可以使用它。

最佳答案

使用 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)

关于sql - 按子字符串对sql结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654965/

相关文章:

sql-server - sys.dm_db_missing_index_details 不返回任何行

sql - 将一个存储过程的结果分配给另一个存储过程中的变量

sql-server-2005 - Sqlcmd生成的文件头下没有虚线,没有行数

SQL 可搜索缓存 - 高可扩展性

sql - 需要 SARGABLE 方式来过滤记录并为 NULL 指定默认值

MYSQL 仅转储某些行

sql - 将记录永久标记为只读的最佳方法是什么?

sql - Delphi 2010中TADOQuery的数组参数

c# - ',' 附近的语法不正确。 SQL Server 和 C#

SQL查询以获取具有子记录列表的父表的记录