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

#6 Maxi
18/11/2004 - 14:48 | Informe spam
Perdon, respondi rapido :(

Liliana, ese codigo tiene un pequeño problema :( mira te paso el ejemplo que
probe ;)


create table #tmp (id int identity, code varchar(50),palabra varchar(50))

INSERT INTO #TMP (palabra) values ('ana')
INSERT INTO #TMP (palabra) values ('Andres')
INSERT INTO #TMP (palabra) values ('Juan')
INSERT INTO #TMP (palabra) values ('Carlos')
INSERT INTO #TMP (palabra) values ('Alejandro')

go

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

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

select * from #tmp

==




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
#7 Liliana Sorrentino
18/11/2004 - 14:57 | Informe spam
Sí Maxi, lo vi, pero por los datos que mandaba Raúl de ejemplo di por
sentado que la información estaba ordenada por el primer caracter de name,
(ni siquiera por todo el campo, fijate los nombres que empiezan con B) por
el identity que tiene. Supongo que si no es así, nos no hará saber.

"Maxi" escribió en el mensaje
news:
Perdon, respondi rapido :(

Liliana, ese codigo tiene un pequeño problema :( mira te paso el ejemplo


que
probe ;)

>
create table #tmp (id int identity, code varchar(50),palabra varchar(50))

INSERT INTO #TMP (palabra) values ('ana')
INSERT INTO #TMP (palabra) values ('Andres')
INSERT INTO #TMP (palabra) values ('Juan')
INSERT INTO #TMP (palabra) values ('Carlos')
INSERT INTO #TMP (palabra) values ('Alejandro')

go

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

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


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

select * from #tmp

==>




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
#8 Maxi
18/11/2004 - 15:09 | Informe spam
ok Liliana, solo lo mencione porque quizas con la forma en que estan
ordenados los datos lo pueda aplicar pero si eso cambia el Query va a fallar
:(


Salu2

Maxi


"Liliana Sorrentino" escribió en el mensaje
news:%
Sí Maxi, lo vi, pero por los datos que mandaba Raúl de ejemplo di por
sentado que la información estaba ordenada por el primer caracter de name,
(ni siquiera por todo el campo, fijate los nombres que empiezan con B) por
el identity que tiene. Supongo que si no es así, nos no hará saber.

"Maxi" escribió en el mensaje
news:
Perdon, respondi rapido :(

Liliana, ese codigo tiene un pequeño problema :( mira te paso el ejemplo


que
probe ;)

>>
create table #tmp (id int identity, code varchar(50),palabra varchar(50))

INSERT INTO #TMP (palabra) values ('ana')
INSERT INTO #TMP (palabra) values ('Andres')
INSERT INTO #TMP (palabra) values ('Juan')
INSERT INTO #TMP (palabra) values ('Carlos')
INSERT INTO #TMP (palabra) values ('Alejandro')

go

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

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


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

select * from #tmp

==>>




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











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
#9 Liliana Sorrentino
18/11/2004 - 15:22 | Informe spam
Solo para ejercitar la neurona, probé creando una PK sobre la tabla, los
resultados son distintos a los que pide Raul, pero al menos deja los datos
de name en orden. Otra alternativa. El query queda igual.

alter table #TMP add constraint pk_#TMP primary key (palabra, id)

id code palabra
-
5 A0001 Alejandro
1 a0002 ana
2 A0003 Andres
4 C0001 Carlos
3 J0001 Juan

"Maxi" escribió en el mensaje
news:ubG#
ok Liliana, solo lo mencione porque quizas con la forma en que estan
ordenados los datos lo pueda aplicar pero si eso cambia el Query va a


fallar
:(


Salu2

Maxi


"Liliana Sorrentino" escribió en el


mensaje
news:%
> Sí Maxi, lo vi, pero por los datos que mandaba Raúl de ejemplo di por
> sentado que la información estaba ordenada por el primer caracter de


name,
> (ni siquiera por todo el campo, fijate los nombres que empiezan con B)


por
> el identity que tiene. Supongo que si no es así, nos no hará saber.
>
> "Maxi" escribió en el mensaje
> news:
>> Perdon, respondi rapido :(
>>
>> Liliana, ese codigo tiene un pequeño problema :( mira te paso el


ejemplo
> que
>> probe ;)
>>
>> > >>
>> create table #tmp (id int identity, code varchar(50),palabra


varchar(50))
>>
>> INSERT INTO #TMP (palabra) values ('ana')
>> INSERT INTO #TMP (palabra) values ('Andres')
>> INSERT INTO #TMP (palabra) values ('Juan')
>> INSERT INTO #TMP (palabra) values ('Carlos')
>> INSERT INTO #TMP (palabra) values ('Alejandro')
>>
>> go
>>
>> DECLARE @letra char, @numero smallint
>> SET @numero=1
>>
>> UPDATE p SET @numero = CASE @letra WHEN SUBSTRING(palabra,1,1) THEN
> @numero
>> + 1
>> ELSE 1 END,
>> @letra = SUBSTRING(palabra,1,1),
>> code = @letra + RIGHT( '0000' + CAST(@numero AS VARCHAR ),
>> 4)
>> FROM #tmp p
>> GO
>>
>> select * from #tmp
>>
>> ==> >>
>>
>>
>>
>>
>> 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
>>
>>
>
>



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
#10 Maxi
18/11/2004 - 15:34 | Informe spam
LI, PORQUE DECIS QUE SON DISTINTOS?


Salu2

Maxi


"Liliana Sorrentino" escribió en el mensaje
news:e$
Solo para ejercitar la neurona, probé creando una PK sobre la tabla, los
resultados son distintos a los que pide Raul, pero al menos deja los datos
de name en orden. Otra alternativa. El query queda igual.

alter table #TMP add constraint pk_#TMP primary key (palabra, id)

id code palabra
-
5 A0001 Alejandro
1 a0002 ana
2 A0003 Andres
4 C0001 Carlos
3 J0001 Juan

"Maxi" escribió en el mensaje
news:ubG#
ok Liliana, solo lo mencione porque quizas con la forma en que estan
ordenados los datos lo pueda aplicar pero si eso cambia el Query va a


fallar
:(


Salu2

Maxi


"Liliana Sorrentino" escribió en el


mensaje
news:%
> Sí Maxi, lo vi, pero por los datos que mandaba Raúl de ejemplo di por
> sentado que la información estaba ordenada por el primer caracter de


name,
> (ni siquiera por todo el campo, fijate los nombres que empiezan con B)


por
> el identity que tiene. Supongo que si no es así, nos no hará saber.
>
> "Maxi" escribió en el mensaje
> news:
>> Perdon, respondi rapido :(
>>
>> Liliana, ese codigo tiene un pequeño problema :( mira te paso el


ejemplo
> que
>> probe ;)
>>
>> >> >>
>> create table #tmp (id int identity, code varchar(50),palabra


varchar(50))
>>
>> INSERT INTO #TMP (palabra) values ('ana')
>> INSERT INTO #TMP (palabra) values ('Andres')
>> INSERT INTO #TMP (palabra) values ('Juan')
>> INSERT INTO #TMP (palabra) values ('Carlos')
>> INSERT INTO #TMP (palabra) values ('Alejandro')
>>
>> go
>>
>> DECLARE @letra char, @numero smallint
>> SET @numero=1
>>
>> UPDATE p SET @numero = CASE @letra WHEN SUBSTRING(palabra,1,1) THEN
> @numero
>> + 1
>> ELSE 1 END,
>> @letra = SUBSTRING(palabra,1,1),
>> code = @letra + RIGHT( '0000' + CAST(@numero AS
>> VARCHAR ),
>> 4)
>> FROM #tmp p
>> GO
>>
>> select * from #tmp
>>
>> ==>> >>
>>
>>
>>
>>
>> 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
>>
>>
>
>



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











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 AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida