Как сделать частичное совпадение `group by` - PullRequest
7 голосов
/ 12 мая 2011

У меня есть таблица на SQL-сервере с кодами проектов и подпроектами в тех же полях.

Структура примерно такая

+----+------+-------------+-------+--------+--------+
| id | date | projectcode | debit | credit | budget |
+----+------+-------------+-------+--------+--------+
| 1  | bla  | A100        | bla
| 2  | bla  | A100.01     |
| 3  | bla  | A112        |
| 4  | bla  | A112.02

Как мне сделать выбор, подобный этому

SELECT projectcode
  , sum(debit) as debit
  , sum(credit) as credit
  , sum(budget) as budget
FROM table1
GROUP BY -insert-answer-here-

Я хочу, чтобы на выходе group by A100 и A100.01 и A100.x вместе, а также A112 + A112.x

Как мне это сделать?

У меня нет контроля над структурой таблицы.

Ответы [ 3 ]

11 голосов
/ 12 мая 2011
GROUP BY LEFT(projectcode ,CHARINDEX('.',projectcode  + '.')-1)
1 голос
/ 12 мая 2011

Если код проекта всегда следует одному и тому же шаблону (cnnn / cnnn.nn), вы можете просто получить первые четыре символа:

group by substring(projectcode, 1, 4)
0 голосов
/ 12 мая 2011

Может быть, это будет работать:

SELECT Substring(projectcode, 1, 4) as Project
  , sum(debit) as debit
  , sum(credit) as credit
  , sum(budget) as budget
FROM table1
GROUP BY Substring(projectcode, 1, 4)
...