Ordenar registros

25/07/2006 - 16:42 por frank | Informe spam
Hola,

Necesito ordenar por un campo definido como nvarchar(400) pero sin tener en
cuenta los posibles caracteres "raros" del principio.
O sea,
¿B?
A
se debe ordenar como A, ¿B? (en una ordenación normal, el caracter '¿' vá
antes de la 'A')

Lo puedo hacer añadiendo una clausula
Order By replace(memArticle, '¿','')
Y me lo ordena bien.

el problema, es que tengo un select de esta forma:

select
identity(int) as Codi,
memArticle
INTO tblArticlesindexats
FROM tblArticles
ORDER BY Replace(memArticle, '¿', '') //Así falla. Pero solo en un select
con un INTO

Y necesito que el identity sea creado de acuerdo al order by.

Adjunto el script con la creacion de las tablas y los select de lo que estoy
haciendo.

SET NOCOUNT ON

iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'tblAOrdenar')
DROP TABLE tblAOrdenar

CREATE TABLE tblAOrdenar
(
lngID int,
memArticle nvarchar(400)
)

GO

INSERT INTO tblAOrdenar VALUES (1, '¿B')
INSERT INTO tblAOrdenar VALUES (2, 'A')
INSERT INTO tblAOrdenar VALUES (4, '¿C')
INSERT INTO tblAOrdenar VALUES (3, 'AB')


GO
SET NOCOUNT OFF

PRINT 'ORDEN NATURAL'
select * from tblAOrdenar order by memArticle
GO
PRINT 'ORDEN SIN INTERROGANTES' --ESTE ES EL ORDEN QUE QUIERO CONSEGUIR
select * from tblAOrdenar order by replace(memArticle,'¿','')
GO

iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'tblOrdenats')
DROP TABLE tblOrdenats

go
select
identity(int) as codi,
memArticle
into tblOrdenats

from tblAOrdenar
order by
replace(memArticle,'¿','')


GO
PRINT 'ORDEN EN LA NUEVA TABLA'
SELECT * from tblOrdenats ORDER BY codi

Grácias

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
25/07/2006 - 22:10 | Informe spam
Miguel,

Gracias por incluirme en el articulo. Una buena oportunidad para mostrar las
nuevas ventajas de la version 2005.

Que te parece si incluimos tambien el operador "pivot" en la version que
creastes para sql server 2005?.

No lo he probado porque no lo tengo instalado en la computer del trabajo.

with cte
as
(
select
ID_TABLA,
NUMERO_CLIENTE,
DATO_CLIENTE,
rank() over(partition by NUMERO_CLIENTE order by ID_TABLA) as Orden
from
dbo.t1
)
select
t1.NUMERO_CLIENTE,
[1] as DATO1,
[2] as DATO2,
[3] as DATO3
from
cte as t1
pivot
(
max(DATO_CLIENTE)
for Orden in (1, 2, 3)
) as pvt
go


No puedo usar messenger desde el trabajo, pero si puedes escribirme a mi
e-mail.


Saludos,

Alejandro Mesa




"Miguel Egea" wrote:

Alejandro, revisa esta publicación (te habría escrito en privado pero no se
como), si hay algo que no esté bien, dimelo y lo quito :) (o entra en msn y
charlamos.)

http://www.configuracionesintegrale...articulo22

Saludos


"Alejandro Mesa" wrote in message
news:
> Frank,
>
> Tratemos alterando la tabla [tblAOrdenar], adicionando una columna
> calculada
> referenciando la formula y creando un indice nonclustered usando esa
> columna.
> Luego ordenamos por esta columna durante el insert.
>
> alter table tblAOrdenar
> add c1 as replace(memArticle,'¿','')
> go
>
> create nonclustered index tblAOrdenar_c1_nu_nc_ix
> on dbo.tblAOrdenar(c1 asc)
> go
>
> select identity(int) as codi, memArticle
> into dbo.t1
> from tblAOrdenar
> order by c1
> go
>
> PRINT 'ORDEN EN LA NUEVA TABLA - t1'
> SELECT * from dbo.t1 ORDER BY codi
> go
>
> Resultado:
>
> ORDEN EN LA NUEVA TABLA - t1
>
> codi memArticle
> 1 A
> 2 AB
> 3 ¿B
> 4 ¿C
>
> (4 row(s) affected)
>
>
> AMB
>
> "frank" wrote:
>
>> Hola Alejandro,
>>
>> No. No me dá error. El problema, es el orden en el que se insertan los
>> registros en la tabla "tblOrdenats"
>> A mi, el último select me sale en este orden:
>> 1 ¿B
>> 2 A
>> 3 ¿C
>> 4 AB
>>
>> cuando el orden correcto (segun el order by replace(memArticle, '¿', '')
>> deberia ser:
>> 1 A
>> 2 AB
>> 3 ¿B
>> 4 ¿C
>>
>> Estoy utilizando SQL2000 con SP3
>> Gracias.
>>
>>
>> "Alejandro Mesa" escribió en el
>> mensaje news:
>> > Frank,
>> >
>> > Yo no puedo reproducir el error en mi maquina (no da error). Que
>> > version
>> de
>> > sql server estas usando, incluyendo service pack?
>> >
>> >
>> > AMB
>> >
>> > "frank" wrote:
>> >
>> > > Hola,
>> > >
>> > > Necesito ordenar por un campo definido como nvarchar(400) pero sin
>> > > tener
>> en
>> > > cuenta los posibles caracteres "raros" del principio.
>> > > O sea,
>> > > ¿B?
>> > > A
>> > > se debe ordenar como A, ¿B? (en una ordenación normal, el caracter
>> > > '¿'
>> vá
>> > > antes de la 'A')
>> > >
>> > > Lo puedo hacer añadiendo una clausula
>> > > Order By replace(memArticle, '¿','')
>> > > Y me lo ordena bien.
>> > >
>> > > el problema, es que tengo un select de esta forma:
>> > >
>> > > select
>> > > identity(int) as Codi,
>> > > memArticle
>> > > INTO tblArticlesindexats
>> > > FROM tblArticles
>> > > ORDER BY Replace(memArticle, '¿', '') //Así falla. Pero solo en un
>> select
>> > > con un INTO
>> > >
>> > > Y necesito que el identity sea creado de acuerdo al order by.
>> > >
>> > > Adjunto el script con la creacion de las tablas y los select de lo
>> > > que
>> estoy
>> > > haciendo.
>> > >
>> > > SET NOCOUNT ON
>> > >
>> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> > > WHERE TABLE_NAME = 'tblAOrdenar')
>> > > DROP TABLE tblAOrdenar
>> > >
>> > > CREATE TABLE tblAOrdenar
>> > > (
>> > > lngID int,
>> > > memArticle nvarchar(400)
>> > > )
>> > >
>> > > GO
>> > >
>> > > INSERT INTO tblAOrdenar VALUES (1, '¿B')
>> > > INSERT INTO tblAOrdenar VALUES (2, 'A')
>> > > INSERT INTO tblAOrdenar VALUES (4, '¿C')
>> > > INSERT INTO tblAOrdenar VALUES (3, 'AB')
>> > >
>> > >
>> > > GO
>> > > SET NOCOUNT OFF
>> > >
>> > > PRINT 'ORDEN NATURAL'
>> > > select * from tblAOrdenar order by memArticle
>> > > GO
>> > > PRINT 'ORDEN SIN INTERROGANTES' --ESTE ES EL ORDEN QUE QUIERO
>> > > CONSEGUIR
>> > > select * from tblAOrdenar order by replace(memArticle,'¿','')
>> > > GO
>> > >
>> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> > > WHERE TABLE_NAME = 'tblOrdenats')
>> > > DROP TABLE tblOrdenats
>> > >
>> > > go
>> > > select
>> > > identity(int) as codi,
>> > > memArticle
>> > > into tblOrdenats
>> > >
>> > > from tblAOrdenar
>> > > order by
>> > > replace(memArticle,'¿','')
>> > >
>> > >
>> > > GO
>> > > PRINT 'ORDEN EN LA NUEVA TABLA'
>> > > SELECT * from tblOrdenats ORDER BY codi
>> > >
>> > > Grácias
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>>
>>
>>

Respuesta Responder a este mensaje
#7 Miguel Egea
25/07/2006 - 23:00 | Informe spam
me parece fantástico, no quise complicarlo más, pero ya que te has molestado
:)

Saludos!!!
"Alejandro Mesa" wrote in message
news:
Miguel,

Gracias por incluirme en el articulo. Una buena oportunidad para mostrar
las
nuevas ventajas de la version 2005.

Que te parece si incluimos tambien el operador "pivot" en la version que
creastes para sql server 2005?.

No lo he probado porque no lo tengo instalado en la computer del trabajo.

with cte
as
(
select
ID_TABLA,
NUMERO_CLIENTE,
DATO_CLIENTE,
rank() over(partition by NUMERO_CLIENTE order by ID_TABLA) as Orden
from
dbo.t1
)
select
t1.NUMERO_CLIENTE,
[1] as DATO1,
[2] as DATO2,
[3] as DATO3
from
cte as t1
pivot
(
max(DATO_CLIENTE)
for Orden in (1, 2, 3)
) as pvt
go


No puedo usar messenger desde el trabajo, pero si puedes escribirme a mi
e-mail.


Saludos,

Alejandro Mesa




"Miguel Egea" wrote:

Alejandro, revisa esta publicación (te habría escrito en privado pero no
se
como), si hay algo que no esté bien, dimelo y lo quito :) (o entra en msn
y
charlamos.)

http://www.configuracionesintegrale...articulo22

Saludos


"Alejandro Mesa" wrote in
message
news:
> Frank,
>
> Tratemos alterando la tabla [tblAOrdenar], adicionando una columna
> calculada
> referenciando la formula y creando un indice nonclustered usando esa
> columna.
> Luego ordenamos por esta columna durante el insert.
>
> alter table tblAOrdenar
> add c1 as replace(memArticle,'¿','')
> go
>
> create nonclustered index tblAOrdenar_c1_nu_nc_ix
> on dbo.tblAOrdenar(c1 asc)
> go
>
> select identity(int) as codi, memArticle
> into dbo.t1
> from tblAOrdenar
> order by c1
> go
>
> PRINT 'ORDEN EN LA NUEVA TABLA - t1'
> SELECT * from dbo.t1 ORDER BY codi
> go
>
> Resultado:
>
> ORDEN EN LA NUEVA TABLA - t1
>
> codi memArticle
> 1 A
> 2 AB
> 3 ¿B
> 4 ¿C
>
> (4 row(s) affected)
>
>
> AMB
>
> "frank" wrote:
>
>> Hola Alejandro,
>>
>> No. No me dá error. El problema, es el orden en el que se insertan los
>> registros en la tabla "tblOrdenats"
>> A mi, el último select me sale en este orden:
>> 1 ¿B
>> 2 A
>> 3 ¿C
>> 4 AB
>>
>> cuando el orden correcto (segun el order by replace(memArticle, '¿',
>> '')
>> deberia ser:
>> 1 A
>> 2 AB
>> 3 ¿B
>> 4 ¿C
>>
>> Estoy utilizando SQL2000 con SP3
>> Gracias.
>>
>>
>> "Alejandro Mesa" escribió en
>> el
>> mensaje news:
>> > Frank,
>> >
>> > Yo no puedo reproducir el error en mi maquina (no da error). Que
>> > version
>> de
>> > sql server estas usando, incluyendo service pack?
>> >
>> >
>> > AMB
>> >
>> > "frank" wrote:
>> >
>> > > Hola,
>> > >
>> > > Necesito ordenar por un campo definido como nvarchar(400) pero sin
>> > > tener
>> en
>> > > cuenta los posibles caracteres "raros" del principio.
>> > > O sea,
>> > > ¿B?
>> > > A
>> > > se debe ordenar como A, ¿B? (en una ordenación normal, el caracter
>> > > '¿'
>> vá
>> > > antes de la 'A')
>> > >
>> > > Lo puedo hacer añadiendo una clausula
>> > > Order By replace(memArticle, '¿','')
>> > > Y me lo ordena bien.
>> > >
>> > > el problema, es que tengo un select de esta forma:
>> > >
>> > > select
>> > > identity(int) as Codi,
>> > > memArticle
>> > > INTO tblArticlesindexats
>> > > FROM tblArticles
>> > > ORDER BY Replace(memArticle, '¿', '') //Así falla. Pero solo en un
>> select
>> > > con un INTO
>> > >
>> > > Y necesito que el identity sea creado de acuerdo al order by.
>> > >
>> > > Adjunto el script con la creacion de las tablas y los select de lo
>> > > que
>> estoy
>> > > haciendo.
>> > >
>> > > SET NOCOUNT ON
>> > >
>> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> > > WHERE TABLE_NAME = 'tblAOrdenar')
>> > > DROP TABLE tblAOrdenar
>> > >
>> > > CREATE TABLE tblAOrdenar
>> > > (
>> > > lngID int,
>> > > memArticle nvarchar(400)
>> > > )
>> > >
>> > > GO
>> > >
>> > > INSERT INTO tblAOrdenar VALUES (1, '¿B')
>> > > INSERT INTO tblAOrdenar VALUES (2, 'A')
>> > > INSERT INTO tblAOrdenar VALUES (4, '¿C')
>> > > INSERT INTO tblAOrdenar VALUES (3, 'AB')
>> > >
>> > >
>> > > GO
>> > > SET NOCOUNT OFF
>> > >
>> > > PRINT 'ORDEN NATURAL'
>> > > select * from tblAOrdenar order by memArticle
>> > > GO
>> > > PRINT 'ORDEN SIN INTERROGANTES' --ESTE ES EL ORDEN QUE QUIERO
>> > > CONSEGUIR
>> > > select * from tblAOrdenar order by replace(memArticle,'¿','')
>> > > GO
>> > >
>> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> > > WHERE TABLE_NAME = 'tblOrdenats')
>> > > DROP TABLE tblOrdenats
>> > >
>> > > go
>> > > select
>> > > identity(int) as codi,
>> > > memArticle
>> > > into tblOrdenats
>> > >
>> > > from tblAOrdenar
>> > > order by
>> > > replace(memArticle,'¿','')
>> > >
>> > >
>> > > GO
>> > > PRINT 'ORDEN EN LA NUEVA TABLA'
>> > > SELECT * from tblOrdenats ORDER BY codi
>> > >
>> > > Grácias
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>>
>>
>>

Respuesta Responder a este mensaje
#8 Alejandro Mesa
26/07/2006 - 04:05 | Informe spam
Miguel,

Esta version ya la probe y el resultado es el esperado. No quites la otra
solucion (en la que usas left join), solo adiciona esta para presentar el
operador "pivot".

with cte
as
(
select
ID_TABLA,
NUMERO_CLIENTE,
DATO_CLIENTE,
rank() over(partition by NUMERO_CLIENTE order by ID_TABLA) as Orden
from
dbo.t1
)
select
NUMERO_CLIENTE,
[1] as DATO1,
[2] as DATO2,
[3] as DATO3
from
(
select DATO_CLIENTE, Orden, NUMERO_CLIENTE from cte
)as t
pivot
(
max(DATO_CLIENTE)
for Orden in ([1], [2], [3])
) as pvt
go


AMB


"Miguel Egea" wrote:

me parece fantástico, no quise complicarlo más, pero ya que te has molestado
:)

Saludos!!!
"Alejandro Mesa" wrote in message
news:
> Miguel,
>
> Gracias por incluirme en el articulo. Una buena oportunidad para mostrar
> las
> nuevas ventajas de la version 2005.
>
> Que te parece si incluimos tambien el operador "pivot" en la version que
> creastes para sql server 2005?.
>
> No lo he probado porque no lo tengo instalado en la computer del trabajo.
>
> with cte
> as
> (
> select
> ID_TABLA,
> NUMERO_CLIENTE,
> DATO_CLIENTE,
> rank() over(partition by NUMERO_CLIENTE order by ID_TABLA) as Orden
> from
> dbo.t1
> )
> select
> t1.NUMERO_CLIENTE,
> [1] as DATO1,
> [2] as DATO2,
> [3] as DATO3
> from
> cte as t1
> pivot
> (
> max(DATO_CLIENTE)
> for Orden in (1, 2, 3)
> ) as pvt
> go
>
>
> No puedo usar messenger desde el trabajo, pero si puedes escribirme a mi
> e-mail.
>
>
> Saludos,
>
> Alejandro Mesa
>
>
>
>
> "Miguel Egea" wrote:
>
>> Alejandro, revisa esta publicación (te habría escrito en privado pero no
>> se
>> como), si hay algo que no esté bien, dimelo y lo quito :) (o entra en msn
>> y
>> charlamos.)
>>
>> http://www.configuracionesintegrale...articulo22
>>
>> Saludos
>>
>>
>> "Alejandro Mesa" wrote in
>> message
>> news:
>> > Frank,
>> >
>> > Tratemos alterando la tabla [tblAOrdenar], adicionando una columna
>> > calculada
>> > referenciando la formula y creando un indice nonclustered usando esa
>> > columna.
>> > Luego ordenamos por esta columna durante el insert.
>> >
>> > alter table tblAOrdenar
>> > add c1 as replace(memArticle,'¿','')
>> > go
>> >
>> > create nonclustered index tblAOrdenar_c1_nu_nc_ix
>> > on dbo.tblAOrdenar(c1 asc)
>> > go
>> >
>> > select identity(int) as codi, memArticle
>> > into dbo.t1
>> > from tblAOrdenar
>> > order by c1
>> > go
>> >
>> > PRINT 'ORDEN EN LA NUEVA TABLA - t1'
>> > SELECT * from dbo.t1 ORDER BY codi
>> > go
>> >
>> > Resultado:
>> >
>> > ORDEN EN LA NUEVA TABLA - t1
>> >
>> > codi memArticle
>> > 1 A
>> > 2 AB
>> > 3 ¿B
>> > 4 ¿C
>> >
>> > (4 row(s) affected)
>> >
>> >
>> > AMB
>> >
>> > "frank" wrote:
>> >
>> >> Hola Alejandro,
>> >>
>> >> No. No me dá error. El problema, es el orden en el que se insertan los
>> >> registros en la tabla "tblOrdenats"
>> >> A mi, el último select me sale en este orden:
>> >> 1 ¿B
>> >> 2 A
>> >> 3 ¿C
>> >> 4 AB
>> >>
>> >> cuando el orden correcto (segun el order by replace(memArticle, '¿',
>> >> '')
>> >> deberia ser:
>> >> 1 A
>> >> 2 AB
>> >> 3 ¿B
>> >> 4 ¿C
>> >>
>> >> Estoy utilizando SQL2000 con SP3
>> >> Gracias.
>> >>
>> >>
>> >> "Alejandro Mesa" escribió en
>> >> el
>> >> mensaje news:
>> >> > Frank,
>> >> >
>> >> > Yo no puedo reproducir el error en mi maquina (no da error). Que
>> >> > version
>> >> de
>> >> > sql server estas usando, incluyendo service pack?
>> >> >
>> >> >
>> >> > AMB
>> >> >
>> >> > "frank" wrote:
>> >> >
>> >> > > Hola,
>> >> > >
>> >> > > Necesito ordenar por un campo definido como nvarchar(400) pero sin
>> >> > > tener
>> >> en
>> >> > > cuenta los posibles caracteres "raros" del principio.
>> >> > > O sea,
>> >> > > ¿B?
>> >> > > A
>> >> > > se debe ordenar como A, ¿B? (en una ordenación normal, el caracter
>> >> > > '¿'
>> >> vá
>> >> > > antes de la 'A')
>> >> > >
>> >> > > Lo puedo hacer añadiendo una clausula
>> >> > > Order By replace(memArticle, '¿','')
>> >> > > Y me lo ordena bien.
>> >> > >
>> >> > > el problema, es que tengo un select de esta forma:
>> >> > >
>> >> > > select
>> >> > > identity(int) as Codi,
>> >> > > memArticle
>> >> > > INTO tblArticlesindexats
>> >> > > FROM tblArticles
>> >> > > ORDER BY Replace(memArticle, '¿', '') //Así falla. Pero solo en un
>> >> select
>> >> > > con un INTO
>> >> > >
>> >> > > Y necesito que el identity sea creado de acuerdo al order by.
>> >> > >
>> >> > > Adjunto el script con la creacion de las tablas y los select de lo
>> >> > > que
>> >> estoy
>> >> > > haciendo.
>> >> > >
>> >> > > SET NOCOUNT ON
>> >> > >
>> >> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> >> > > WHERE TABLE_NAME = 'tblAOrdenar')
>> >> > > DROP TABLE tblAOrdenar
>> >> > >
>> >> > > CREATE TABLE tblAOrdenar
>> >> > > (
>> >> > > lngID int,
>> >> > > memArticle nvarchar(400)
>> >> > > )
>> >> > >
>> >> > > GO
>> >> > >
>> >> > > INSERT INTO tblAOrdenar VALUES (1, '¿B')
>> >> > > INSERT INTO tblAOrdenar VALUES (2, 'A')
>> >> > > INSERT INTO tblAOrdenar VALUES (4, '¿C')
>> >> > > INSERT INTO tblAOrdenar VALUES (3, 'AB')
>> >> > >
>> >> > >
>> >> > > GO
>> >> > > SET NOCOUNT OFF
>> >> > >
>> >> > > PRINT 'ORDEN NATURAL'
>> >> > > select * from tblAOrdenar order by memArticle
>> >> > > GO
>> >> > > PRINT 'ORDEN SIN INTERROGANTES' --ESTE ES EL ORDEN QUE QUIERO
>> >> > > CONSEGUIR
>> >> > > select * from tblAOrdenar order by replace(memArticle,'¿','')
>> >> > > GO
>> >> > >
>> >> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> >> > > WHERE TABLE_NAME = 'tblOrdenats')
>> >> > > DROP TABLE tblOrdenats
>> >> > >
>> >> > > go
>> >> > > select
>> >> > > identity(int) as codi,
>> >> > > memArticle
>> >> > > into tblOrdenats
>> >> > >
>> >> > > from tblAOrdenar
>> >> > > order by
>> >> > > replace(memArticle,'¿','')
>> >> > >
>> >> > >
>> >> > > GO
>> >> > > PRINT 'ORDEN EN LA NUEVA TABLA'
>> >> > > SELECT * from tblOrdenats ORDER BY codi
>> >> > >
>> >> > > Grácias
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >>
>> >>
>> >>
>>


Respuesta Responder a este mensaje
#9 Miguel Egea
26/07/2006 - 09:02 | Informe spam
añadido, muchas gracias!!

Saludos
"Alejandro Mesa" wrote in message
news:
Miguel,

Esta version ya la probe y el resultado es el esperado. No quites la otra
solucion (en la que usas left join), solo adiciona esta para presentar el
operador "pivot".

with cte
as
(
select
ID_TABLA,
NUMERO_CLIENTE,
DATO_CLIENTE,
rank() over(partition by NUMERO_CLIENTE order by ID_TABLA) as Orden
from
dbo.t1
)
select
NUMERO_CLIENTE,
[1] as DATO1,
[2] as DATO2,
[3] as DATO3
from
(
select DATO_CLIENTE, Orden, NUMERO_CLIENTE from cte
)as t
pivot
(
max(DATO_CLIENTE)
for Orden in ([1], [2], [3])
) as pvt
go


AMB


"Miguel Egea" wrote:

me parece fantástico, no quise complicarlo más, pero ya que te has
molestado
:)

Saludos!!!
"Alejandro Mesa" wrote in
message
news:
> Miguel,
>
> Gracias por incluirme en el articulo. Una buena oportunidad para
> mostrar
> las
> nuevas ventajas de la version 2005.
>
> Que te parece si incluimos tambien el operador "pivot" en la version
> que
> creastes para sql server 2005?.
>
> No lo he probado porque no lo tengo instalado en la computer del
> trabajo.
>
> with cte
> as
> (
> select
> ID_TABLA,
> NUMERO_CLIENTE,
> DATO_CLIENTE,
> rank() over(partition by NUMERO_CLIENTE order by ID_TABLA) as Orden
> from
> dbo.t1
> )
> select
> t1.NUMERO_CLIENTE,
> [1] as DATO1,
> [2] as DATO2,
> [3] as DATO3
> from
> cte as t1
> pivot
> (
> max(DATO_CLIENTE)
> for Orden in (1, 2, 3)
> ) as pvt
> go
>
>
> No puedo usar messenger desde el trabajo, pero si puedes escribirme a
> mi
> e-mail.
>
>
> Saludos,
>
> Alejandro Mesa
>
>
>
>
> "Miguel Egea" wrote:
>
>> Alejandro, revisa esta publicación (te habría escrito en privado pero
>> no
>> se
>> como), si hay algo que no esté bien, dimelo y lo quito :) (o entra en
>> msn
>> y
>> charlamos.)
>>
>> http://www.configuracionesintegrale...articulo22
>>
>> Saludos
>>
>>
>> "Alejandro Mesa" wrote in
>> message
>> news:
>> > Frank,
>> >
>> > Tratemos alterando la tabla [tblAOrdenar], adicionando una columna
>> > calculada
>> > referenciando la formula y creando un indice nonclustered usando esa
>> > columna.
>> > Luego ordenamos por esta columna durante el insert.
>> >
>> > alter table tblAOrdenar
>> > add c1 as replace(memArticle,'¿','')
>> > go
>> >
>> > create nonclustered index tblAOrdenar_c1_nu_nc_ix
>> > on dbo.tblAOrdenar(c1 asc)
>> > go
>> >
>> > select identity(int) as codi, memArticle
>> > into dbo.t1
>> > from tblAOrdenar
>> > order by c1
>> > go
>> >
>> > PRINT 'ORDEN EN LA NUEVA TABLA - t1'
>> > SELECT * from dbo.t1 ORDER BY codi
>> > go
>> >
>> > Resultado:
>> >
>> > ORDEN EN LA NUEVA TABLA - t1
>> >
>> > codi memArticle
>> > 1 A
>> > 2 AB
>> > 3 ¿B
>> > 4 ¿C
>> >
>> > (4 row(s) affected)
>> >
>> >
>> > AMB
>> >
>> > "frank" wrote:
>> >
>> >> Hola Alejandro,
>> >>
>> >> No. No me dá error. El problema, es el orden en el que se insertan
>> >> los
>> >> registros en la tabla "tblOrdenats"
>> >> A mi, el último select me sale en este orden:
>> >> 1 ¿B
>> >> 2 A
>> >> 3 ¿C
>> >> 4 AB
>> >>
>> >> cuando el orden correcto (segun el order by replace(memArticle,
>> >> '¿',
>> >> '')
>> >> deberia ser:
>> >> 1 A
>> >> 2 AB
>> >> 3 ¿B
>> >> 4 ¿C
>> >>
>> >> Estoy utilizando SQL2000 con SP3
>> >> Gracias.
>> >>
>> >>
>> >> "Alejandro Mesa" escribió
>> >> en
>> >> el
>> >> mensaje news:
>> >> > Frank,
>> >> >
>> >> > Yo no puedo reproducir el error en mi maquina (no da error). Que
>> >> > version
>> >> de
>> >> > sql server estas usando, incluyendo service pack?
>> >> >
>> >> >
>> >> > AMB
>> >> >
>> >> > "frank" wrote:
>> >> >
>> >> > > Hola,
>> >> > >
>> >> > > Necesito ordenar por un campo definido como nvarchar(400) pero
>> >> > > sin
>> >> > > tener
>> >> en
>> >> > > cuenta los posibles caracteres "raros" del principio.
>> >> > > O sea,
>> >> > > ¿B?
>> >> > > A
>> >> > > se debe ordenar como A, ¿B? (en una ordenación normal, el
>> >> > > caracter
>> >> > > '¿'
>> >> vá
>> >> > > antes de la 'A')
>> >> > >
>> >> > > Lo puedo hacer añadiendo una clausula
>> >> > > Order By replace(memArticle, '¿','')
>> >> > > Y me lo ordena bien.
>> >> > >
>> >> > > el problema, es que tengo un select de esta forma:
>> >> > >
>> >> > > select
>> >> > > identity(int) as Codi,
>> >> > > memArticle
>> >> > > INTO tblArticlesindexats
>> >> > > FROM tblArticles
>> >> > > ORDER BY Replace(memArticle, '¿', '') //Así falla. Pero solo en
>> >> > > un
>> >> select
>> >> > > con un INTO
>> >> > >
>> >> > > Y necesito que el identity sea creado de acuerdo al order by.
>> >> > >
>> >> > > Adjunto el script con la creacion de las tablas y los select de
>> >> > > lo
>> >> > > que
>> >> estoy
>> >> > > haciendo.
>> >> > >
>> >> > > SET NOCOUNT ON
>> >> > >
>> >> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> >> > > WHERE TABLE_NAME = 'tblAOrdenar')
>> >> > > DROP TABLE tblAOrdenar
>> >> > >
>> >> > > CREATE TABLE tblAOrdenar
>> >> > > (
>> >> > > lngID int,
>> >> > > memArticle nvarchar(400)
>> >> > > )
>> >> > >
>> >> > > GO
>> >> > >
>> >> > > INSERT INTO tblAOrdenar VALUES (1, '¿B')
>> >> > > INSERT INTO tblAOrdenar VALUES (2, 'A')
>> >> > > INSERT INTO tblAOrdenar VALUES (4, '¿C')
>> >> > > INSERT INTO tblAOrdenar VALUES (3, 'AB')
>> >> > >
>> >> > >
>> >> > > GO
>> >> > > SET NOCOUNT OFF
>> >> > >
>> >> > > PRINT 'ORDEN NATURAL'
>> >> > > select * from tblAOrdenar order by memArticle
>> >> > > GO
>> >> > > PRINT 'ORDEN SIN INTERROGANTES' --ESTE ES EL ORDEN QUE QUIERO
>> >> > > CONSEGUIR
>> >> > > select * from tblAOrdenar order by replace(memArticle,'¿','')
>> >> > > GO
>> >> > >
>> >> > > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
>> >> > > WHERE TABLE_NAME = 'tblOrdenats')
>> >> > > DROP TABLE tblOrdenats
>> >> > >
>> >> > > go
>> >> > > select
>> >> > > identity(int) as codi,
>> >> > > memArticle
>> >> > > into tblOrdenats
>> >> > >
>> >> > > from tblAOrdenar
>> >> > > order by
>> >> > > replace(memArticle,'¿','')
>> >> > >
>> >> > >
>> >> > > GO
>> >> > > PRINT 'ORDEN EN LA NUEVA TABLA'
>> >> > > SELECT * from tblOrdenats ORDER BY codi
>> >> > >
>> >> > > Grácias
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >>
>> >>
>> >>
>>


Respuesta Responder a este mensaje
#10 frank
26/07/2006 - 09:28 | Informe spam
Muchas grácias a los dos.
Al final, y por imposibilidad de modificar la tabla, me quedo con la
solución de Miguel que, aunque si es un poco mas lenta, no afecta para nada
al rendimiento global.

De nuevo, muchas gracias

"frank" escribió en el mensaje
news:
Hola Alejandro,

No. No me dá error. El problema, es el orden en el que se insertan los
registros en la tabla "tblOrdenats"
A mi, el último select me sale en este orden:
1 ¿B
2 A
3 ¿C
4 AB

cuando el orden correcto (segun el order by replace(memArticle, '¿', '')
deberia ser:
1 A
2 AB
3 ¿B
4 ¿C

Estoy utilizando SQL2000 con SP3
Gracias.


"Alejandro Mesa" escribió en el
mensaje news:
> Frank,
>
> Yo no puedo reproducir el error en mi maquina (no da error). Que version
de
> sql server estas usando, incluyendo service pack?
>
>
> AMB
>
> "frank" wrote:
>
> > Hola,
> >
> > Necesito ordenar por un campo definido como nvarchar(400) pero sin


tener
en
> > cuenta los posibles caracteres "raros" del principio.
> > O sea,
> > ¿B?
> > A
> > se debe ordenar como A, ¿B? (en una ordenación normal, el caracter '¿'

> > antes de la 'A')
> >
> > Lo puedo hacer añadiendo una clausula
> > Order By replace(memArticle, '¿','')
> > Y me lo ordena bien.
> >
> > el problema, es que tengo un select de esta forma:
> >
> > select
> > identity(int) as Codi,
> > memArticle
> > INTO tblArticlesindexats
> > FROM tblArticles
> > ORDER BY Replace(memArticle, '¿', '') //Así falla. Pero solo en un
select
> > con un INTO
> >
> > Y necesito que el identity sea creado de acuerdo al order by.
> >
> > Adjunto el script con la creacion de las tablas y los select de lo que
estoy
> > haciendo.
> >
> > SET NOCOUNT ON
> >
> > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
> > WHERE TABLE_NAME = 'tblAOrdenar')
> > DROP TABLE tblAOrdenar
> >
> > CREATE TABLE tblAOrdenar
> > (
> > lngID int,
> > memArticle nvarchar(400)
> > )
> >
> > GO
> >
> > INSERT INTO tblAOrdenar VALUES (1, '¿B')
> > INSERT INTO tblAOrdenar VALUES (2, 'A')
> > INSERT INTO tblAOrdenar VALUES (4, '¿C')
> > INSERT INTO tblAOrdenar VALUES (3, 'AB')
> >
> >
> > GO
> > SET NOCOUNT OFF
> >
> > PRINT 'ORDEN NATURAL'
> > select * from tblAOrdenar order by memArticle
> > GO
> > PRINT 'ORDEN SIN INTERROGANTES' --ESTE ES EL ORDEN QUE QUIERO


CONSEGUIR
> > select * from tblAOrdenar order by replace(memArticle,'¿','')
> > GO
> >
> > iF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
> > WHERE TABLE_NAME = 'tblOrdenats')
> > DROP TABLE tblOrdenats
> >
> > go
> > select
> > identity(int) as codi,
> > memArticle
> > into tblOrdenats
> >
> > from tblAOrdenar
> > order by
> > replace(memArticle,'¿','')
> >
> >
> > GO
> > PRINT 'ORDEN EN LA NUEVA TABLA'
> > SELECT * from tblOrdenats ORDER BY codi
> >
> > Grácias
> >
> >
> >
> >
> >
> >
> >
> >
> >


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida