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
 

Leer las respuestas

#1 Alejandro Mesa
25/07/2006 - 17:27 | Informe spam
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









Preguntas similares