2011-05-12 14 views
7

Tengo una tabla en SQL-server con códigos de proyecto y códigos de subproyecto en los mismos campos.¿Cómo hago la coincidencia parcial `group by`

El hotel permanece algo como esto

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

¿Cómo hago un selecto como esto

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

quiero la salida a group by A100 y A100.01 y A100.x juntos también como A112 + A112.x

¿Cómo hago esto?

No tengo control sobre la estructura de la mesa.

Respuesta

11
GROUP BY LEFT(projectcode ,CHARINDEX('.',projectcode + '.')-1) 
1

Si el código de proyecto siempre sigue el mismo patrón (cnnn/cnnn.nn) se puede obtener sólo los primeros cuatro caracteres:

group by substring(projectcode, 1, 4) 
+0

la longitud del prefijo ('A100', etc.) es diferente. – Johan

+0

@Johan: Ok, entonces necesitas usar 'charindex' para ubicar el período en la cadena, como Martin mostró. – Guffa

0

Tal vez esto funcionaría:

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

No puede usar un valor de salida para agrupar, debe especificar la expresión en ambos lugares. – Guffa

+0

@Guffa: funciona en sqlite; mi error. – alex