Subindice para grupos

17/11/2004 - 21:49 por Raul Romero | Informe spam
Buenas tardes compañeros ...

Por favor si alguien me podria ayudar con esta actualizacion si es
que se puede.

Tengo la tabla ...

create table #tblOrdenGrupo
(id1 int identity,
code varchar(5),
name varchar(50))

Cargar registros
insert into #tblOrdenGrupo values ('asd01','Ana')
insert into #tblOrdenGrupo values ('dmo01','Andres')
insert into #tblOrdenGrupo values ('fdg01','Brittany')
insert into #tblOrdenGrupo values ('gft01','Betty')
insert into #tblOrdenGrupo values ('dgh01','Tomas')


Necesito actualizar el codigo a algo como esto, es decir utilizar la
primera letra de la columna "name" para obtener este resultado en
el campo code. Ejs. En el caso que tenga unos 150 "name"s que
comiencen con "A", deberia obtener A0001 ... A0029 ... A0123.


Si tengo mas de 10 repeticiones de "name" (solo la primera letra)
entonces seria algo como ...

50 X0001 Xiao
. . .
. . .
61 X0011 Xen

Muchas gracias por sus respuestas,
Gracias

Raul

Preguntas similare

Leer las respuestas

#1 MAXI
18/11/2004 - 01:22 | Informe spam
Hola Raul, lindo ejercicio me has hecho hacer ;)

CReo que este codigo puede resolver lo que estas buscando.

Lo que no me gusta es el uso de la Tabla temporal, pero buee todo no se
puede ;)

==
select ID1,tx.cantidad,name, CASE WHEN TX.CANTIDAD >10 THEN 'X' ELSE '' END
+
left(#tblOrdenGrupo.name,1) + '00000' + convert(varchar(10),(select count(*)
from #tblOrdenGrupo tl where
tl.id1 <= #tblOrdenGrupo.id1 and left(tl.name,1) =
left(#tblOrdenGrupo.name,1))) XX INTO #tblOrdenGrupo2
from #tblOrdenGrupo inner join (select count(*) as cantidad,left(name,1) as
letra from #tblOrdenGrupo group by left(name,1)) tx
on tx.letra = left(#tblOrdenGrupo.name,1)
order by id1,name


UPDATE #tblOrdenGrupo SET CODE = #tblOrdenGrupo2.XX
FROM #tblOrdenGrupo2 INNER JOIN #tblOrdenGrupo ON
#tblOrdenGrupo2.ID1 = #tblOrdenGrupo.ID1

DROP TABLE #tblOrdenGrupo2

==
Probalo y decime si es lo que estas buscando.

Un abrazo




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Raul Romero" escribió en el mensaje
news:
Buenas tardes compañeros ...

Por favor si alguien me podria ayudar con esta actualizacion si es
que se puede.

Tengo la tabla ...

create table #tblOrdenGrupo
(id1 int identity,
code varchar(5),
name varchar(50))

Cargar registros
insert into #tblOrdenGrupo values ('asd01','Ana')
insert into #tblOrdenGrupo values ('dmo01','Andres')
insert into #tblOrdenGrupo values ('fdg01','Brittany')
insert into #tblOrdenGrupo values ('gft01','Betty')
insert into #tblOrdenGrupo values ('dgh01','Tomas')


Necesito actualizar el codigo a algo como esto, es decir utilizar la
primera letra de la columna "name" para obtener este resultado en
el campo code. Ejs. En el caso que tenga unos 150 "name"s que
comiencen con "A", deberia obtener A0001 ... A0029 ... A0123.


Si tengo mas de 10 repeticiones de "name" (solo la primera letra)
entonces seria algo como ...

50 X0001 Xiao
. . .
. . .
61 X0011 Xen

Muchas gracias por sus respuestas,
Gracias

Raul


Respuesta Responder a este mensaje
#2 Raul Romero
18/11/2004 - 13:54 | Informe spam
Buenos dias Maxi ...

Muchas gracias por tu respuesta, tienes razon, era un problema que me tenia
embrollado. Si es lo que estaba buscando, como es una actualizacion no es
relevante
el uso de una tabla temporal, es decir, no lo voy a utilizar en una
aplicacion solo
era para una modificacion de mis datos para tenerlos mas ordenados, yo
tambien
habia conseguido un resultado aproximado con el uso de cursores pero tu
solucion
es mas corta.

Nuevamente gracias y un abrazo,
Raul

"MAXI" wrote in message
news:
Hola Raul, lindo ejercicio me has hecho hacer ;)

CReo que este codigo puede resolver lo que estas buscando.

Lo que no me gusta es el uso de la Tabla temporal, pero buee todo no se
puede ;)

==>
select ID1,tx.cantidad,name, CASE WHEN TX.CANTIDAD >10 THEN 'X' ELSE ''


END
+
left(#tblOrdenGrupo.name,1) + '00000' + convert(varchar(10),(select


count(*)
from #tblOrdenGrupo tl where
tl.id1 <= #tblOrdenGrupo.id1 and left(tl.name,1) > left(#tblOrdenGrupo.name,1))) XX INTO #tblOrdenGrupo2
from #tblOrdenGrupo inner join (select count(*) as cantidad,left(name,1)


as
letra from #tblOrdenGrupo group by left(name,1)) tx
on tx.letra = left(#tblOrdenGrupo.name,1)
order by id1,name


UPDATE #tblOrdenGrupo SET CODE = #tblOrdenGrupo2.XX
FROM #tblOrdenGrupo2 INNER JOIN #tblOrdenGrupo ON
#tblOrdenGrupo2.ID1 = #tblOrdenGrupo.ID1

DROP TABLE #tblOrdenGrupo2

==>
Probalo y decime si es lo que estas buscando.

Un abrazo




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Raul Romero" escribió en el mensaje
news:
> Buenas tardes compañeros ...
>
> Por favor si alguien me podria ayudar con esta actualizacion si es
> que se puede.
>
> Tengo la tabla ...
>
> create table #tblOrdenGrupo
> (id1 int identity,
> code varchar(5),
> name varchar(50))
>
> Cargar registros
> insert into #tblOrdenGrupo values ('asd01','Ana')
> insert into #tblOrdenGrupo values ('dmo01','Andres')
> insert into #tblOrdenGrupo values ('fdg01','Brittany')
> insert into #tblOrdenGrupo values ('gft01','Betty')
> insert into #tblOrdenGrupo values ('dgh01','Tomas')
>
>
> Necesito actualizar el codigo a algo como esto, es decir utilizar la
> primera letra de la columna "name" para obtener este resultado en
> el campo code. Ejs. En el caso que tenga unos 150 "name"s que
> comiencen con "A", deberia obtener A0001 ... A0029 ... A0123.
>
>
> Si tengo mas de 10 repeticiones de "name" (solo la primera letra)
> entonces seria algo como ...
>
> 50 X0001 Xiao
> . . .
> . . .
> 61 X0011 Xen
>
> Muchas gracias por sus respuestas,
> Gracias
>
> Raul
>
>


Respuesta Responder a este mensaje
#3 Liliana Sorrentino
18/11/2004 - 13:56 | Informe spam
Hola Raul,
Tal vez te sirva este query, basado en un ejemplo de Miguel Egea.
Saludos, Liliana.

DECLARE @letra char, @numero smallint
SET @numero=1

UPDATE p SET @numero = CASE @letra WHEN SUBSTRING(name,1,1) THEN @numero + 1
ELSE 1 END,
@letra = SUBSTRING(name,1,1),
code = @letra + RIGHT( '0000' + CAST(@numero AS VARCHAR ), 4)
FROM #tblOrdenGrupo p
GO

SELECT * FROM #tblOrdenGrupo

"Raul Romero" escribió en el mensaje
news:
Buenas tardes compañeros ...

Por favor si alguien me podria ayudar con esta actualizacion si es
que se puede.

Tengo la tabla ...

create table #tblOrdenGrupo
(id1 int identity,
code varchar(5),
name varchar(50))

Cargar registros
insert into #tblOrdenGrupo values ('asd01','Ana')
insert into #tblOrdenGrupo values ('dmo01','Andres')
insert into #tblOrdenGrupo values ('fdg01','Brittany')
insert into #tblOrdenGrupo values ('gft01','Betty')
insert into #tblOrdenGrupo values ('dgh01','Tomas')


Necesito actualizar el codigo a algo como esto, es decir utilizar la
primera letra de la columna "name" para obtener este resultado en
el campo code. Ejs. En el caso que tenga unos 150 "name"s que
comiencen con "A", deberia obtener A0001 ... A0029 ... A0123.


Si tengo mas de 10 repeticiones de "name" (solo la primera letra)
entonces seria algo como ...

50 X0001 Xiao
. . .
. . .
61 X0011 Xen

Muchas gracias por sus respuestas,
Gracias

Raul


Respuesta Responder a este mensaje
#4 Raul Romero
18/11/2004 - 14:34 | Informe spam
Excelente Liliana muchas gracias ...

Voy a revisar ambos scripts (El de Miguel y el de Maxi) para adicionar algo
de conocimiento a lo poco que se de SQL Server.

Saludos,
Raul

"Liliana Sorrentino" wrote in message
news:
Hola Raul,
Tal vez te sirva este query, basado en un ejemplo de Miguel Egea.
Saludos, Liliana.

DECLARE @letra char, @numero smallint
SET @numero=1

UPDATE p SET @numero = CASE @letra WHEN SUBSTRING(name,1,1) THEN @numero +


1
ELSE 1 END,
@letra = SUBSTRING(name,1,1),
code = @letra + RIGHT( '0000' + CAST(@numero AS VARCHAR ), 4)
FROM #tblOrdenGrupo p
GO

SELECT * FROM #tblOrdenGrupo

"Raul Romero" escribió en el mensaje
news:
> Buenas tardes compañeros ...
>
> Por favor si alguien me podria ayudar con esta actualizacion si es
> que se puede.
>
> Tengo la tabla ...
>
> create table #tblOrdenGrupo
> (id1 int identity,
> code varchar(5),
> name varchar(50))
>
> Cargar registros
> insert into #tblOrdenGrupo values ('asd01','Ana')
> insert into #tblOrdenGrupo values ('dmo01','Andres')
> insert into #tblOrdenGrupo values ('fdg01','Brittany')
> insert into #tblOrdenGrupo values ('gft01','Betty')
> insert into #tblOrdenGrupo values ('dgh01','Tomas')
>
>
> Necesito actualizar el codigo a algo como esto, es decir utilizar la
> primera letra de la columna "name" para obtener este resultado en
> el campo code. Ejs. En el caso que tenga unos 150 "name"s que
> comiencen con "A", deberia obtener A0001 ... A0029 ... A0123.
>
>
> Si tengo mas de 10 repeticiones de "name" (solo la primera letra)
> entonces seria algo como ...
>
> 50 X0001 Xiao
> . . .
> . . .
> 61 X0011 Xen
>
> Muchas gracias por sus respuestas,
> Gracias
>
> Raul
>
>


Respuesta Responder a este mensaje
#5 Maxi
18/11/2004 - 14:39 | Informe spam
Muy buen ejemplo :)


Salu2

Maxi


"Liliana Sorrentino" escribió en el mensaje
news:
Hola Raul,
Tal vez te sirva este query, basado en un ejemplo de Miguel Egea.
Saludos, Liliana.

DECLARE @letra char, @numero smallint
SET @numero=1

UPDATE p SET @numero = CASE @letra WHEN SUBSTRING(name,1,1) THEN @numero +
1
ELSE 1 END,
@letra = SUBSTRING(name,1,1),
code = @letra + RIGHT( '0000' + CAST(@numero AS VARCHAR ), 4)
FROM #tblOrdenGrupo p
GO

SELECT * FROM #tblOrdenGrupo

"Raul Romero" escribió en el mensaje
news:
Buenas tardes compañeros ...

Por favor si alguien me podria ayudar con esta actualizacion si es
que se puede.

Tengo la tabla ...

create table #tblOrdenGrupo
(id1 int identity,
code varchar(5),
name varchar(50))

Cargar registros
insert into #tblOrdenGrupo values ('asd01','Ana')
insert into #tblOrdenGrupo values ('dmo01','Andres')
insert into #tblOrdenGrupo values ('fdg01','Brittany')
insert into #tblOrdenGrupo values ('gft01','Betty')
insert into #tblOrdenGrupo values ('dgh01','Tomas')


Necesito actualizar el codigo a algo como esto, es decir utilizar la
primera letra de la columna "name" para obtener este resultado en
el campo code. Ejs. En el caso que tenga unos 150 "name"s que
comiencen con "A", deberia obtener A0001 ... A0029 ... A0123.


Si tengo mas de 10 repeticiones de "name" (solo la primera letra)
entonces seria algo como ...

50 X0001 Xiao
. . .
. . .
61 X0011 Xen

Muchas gracias por sus respuestas,
Gracias

Raul











Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.795 / Virus Database: 539 - Release Date: 12/11/2004
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida