2013-02-01 3 views
0

У меня есть таблица с некоторыми записями, где столбец представляет группу каждую записи:результатов группы SQL по подстроке

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, с которым я могу это получить.

ответ

3

Использование SUBSTRING или LEFT (который является более простой, но нестандартные):

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) 
+0

Спасибо, я реализовал этот способ и работает! –

1

Почему вы не используете SUBSTRING() в своем выборе? Обратитесь к MSDN SUBSTRING() Syntax

0

Может быть, что-то вроде этого?

SELECT DISTINCT SUBSTRING(col, 1, CHARINDEX('_', col) -1) 
FROM kittens 
0
SELECT 
    t.id, 
    t.groupcode 
FROM 
    (SELECT id, group, left(group,charindex('_',group)-1) as groupcode FROM table) t 
GROUP BY 
    groupcode 
0

Как насчет left извлечь группу prefix:

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

Примечание: Пожалуйста, попробуйте избегать использования зарезервированных ключевых слов для имен столбцов: например, group

Смежные вопросы