Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de tri

3 réponses
Avatar
bruno
Bonjour,

J'ai un problème de tri sur un champ alphanumérique qui contient du numéique
et de l'alphanumerique.
Je sais, ce n'est pas bien, mais je ne peux vraiment pas faire autrement car
ce sont des donnees imposees par les fournisseurs.

Je souhaiterais pouvoir trier avec, d'abord, tous les numériques triés dans
un ordre numériques et ensuite les alpha triés par ordre alphabétique.
Est-ce possible et si oui comment ?

Pouvoir obtenir quelque chose du genre

PAM 1
PAM 2
PAM 3
PAM 10
PAM 100
PAM A
PAM D1
...
RS 1
RS 2
...
RS 100
...
RS 1000
...
RS BAGUE
...

Merci

CREATE TABLE [dbo].[MARCHANDISE](
[MARC_ID] [int] IDENTITY(1,1) NOT NULL,
[MARC_CODEALPHA] [varchar](50) NOT NULL,
[MARC_CODENUM] [varchar](50) NOT NULL,
[MARC_CODEARTICLE] AS (([MARC_CODEALPHA]+' ')+[MARC_CODENUM]),
[MARC_CODETRI] AS
(([MARC_CODEALPHA]+replicate('0',(25)-len([MARC_CODENUM])))+[MARC_CODENUM]),
CONSTRAINT [PK_MARCHANDISE] PRIMARY KEY CLUSTERED
(
[MARC_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','3')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','10')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','11')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','12')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','A')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','B')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','98')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','99')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','D1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','D2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','100')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','101')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','P350')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','P2403')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','MOSDOLBG')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','100')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','101')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','CDO')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','1000')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','BAGUE')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3700')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3700 S/VA')
GO

3 réponses

Avatar
Fred BROUARD
Bonjour,

tout est possible en SQL. Mais un principe simple dit la chose suivante :
garbage in, garbage out.
Traduisible, par :
de la merde en entrée, de la merde en sortie.
Dans votre cas le non respect de la 1ere forme normale (mélange de deux
informations dans la même colonne) va se traduire par une requête
complexe horriblement couteuse, alors qu'il aurait été si simple de
faire deux colonnes.
Et si, VOUS POUVEZ FAIRE AUTREMENT ! Il suffit de respecter les
principes du développement base de données en dissociant la couche
physique de la couche logique et inversement.

Par exemple dans le champs de saisie de cette référence, on capture
chaque caractères. Tant qu'il est strictement alpha on le met dans la
colonne 1, dès qu'il devient nombre on le met dans la colonne 2, ceci
étant "transparent" dans lIHM :
à la saisie comme indiqué,
à l'affiche par le biais d'une vue qui recolle les deux colonnes !
Étonnement simple non ????

Alors pour votre requête :

SELECT *
FROM MARCHANDISE
ORDER BY MARC_CODEALPHA,
CASE ISNUMERIC(MARC_CODENUM)
WHEN 1
THEN CAST(MARC_CODENUM AS NUMERIC(38,0))
ELSE 99999999999999999999999999999999999999
END

A +



bruno a écrit :
Bonjour,

J'ai un problème de tri sur un champ alphanumérique qui contient du numéique
et de l'alphanumerique.
Je sais, ce n'est pas bien, mais je ne peux vraiment pas faire autrement car
ce sont des donnees imposees par les fournisseurs.

Je souhaiterais pouvoir trier avec, d'abord, tous les numériques triés dans
un ordre numériques et ensuite les alpha triés par ordre alphabétique.
Est-ce possible et si oui comment ?

Pouvoir obtenir quelque chose du genre

PAM 1
PAM 2
PAM 3
PAM 10
PAM 100
PAM A
PAM D1
...
RS 1
RS 2
...
RS 100
...
RS 1000
...
RS BAGUE
...

Merci

CREATE TABLE [dbo].[MARCHANDISE](
[MARC_ID] [int] IDENTITY(1,1) NOT NULL,
[MARC_CODEALPHA] [varchar](50) NOT NULL,
[MARC_CODENUM] [varchar](50) NOT NULL,
[MARC_CODEARTICLE] AS (([MARC_CODEALPHA]+' ')+[MARC_CODENUM]),
[MARC_CODETRI] AS
(([MARC_CODEALPHA]+replicate('0',(25)-len([MARC_CODENUM])))+[MARC_CODENUM]),
CONSTRAINT [PK_MARCHANDISE] PRIMARY KEY CLUSTERED
(
[MARC_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY > OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','3')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','10')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','11')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','12')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','A')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','B')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','98')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','99')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','D1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','D2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','100')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','101')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','P350')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','P2403')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','MOSDOLBG')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','100')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','101')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','CDO')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','1000')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','BAGUE')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3700')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3700 S/VA')
GO






--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Avatar
bruno
Merci Fred,

Mais dans le type de données que j'ai, j'ai aussi des codes qui ressemblent
à
AIRLUX LV3900H ou ALCA P/5A01012P

dans lesquels les alpha et numériques sont mélangés dans la deuxième partie
du code.

En adaptant légèrement votre requete pour trier correctement (ou à peu près)
les alpha après les numériques cela fonctionne

SELECT *
FROM MARCHANDISE
where marc_codealpha='colles'
ORDER BY MARC_CODEALPHA,
CASE ISNUMERIC(MARC_CODENUM)
WHEN 1
THEN CAST(MARC_CODENUM AS NUMERIC(38,0))
ELSE 99999999999999999999999999999999999999
END,
CASE ISNUMERIC(MARC_CODENUM)
WHEN 0
THEN MARC_CODENUM
ELSE 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
END


Pensez-vous que ce serait possible de faire une colonne calculée qui
permettrait de trier toujours sur cette colonne (comme j'avais tenté de le
faire sur la colonne marc_codetri) ?
Et si oui pensez-vous que ce serait très couteux en terme de temps
d'exécution ?

Merci encore

Bruno




"Fred BROUARD" wrote in message
news:%23GDJV3w$
Bonjour,

tout est possible en SQL. Mais un principe simple dit la chose suivante :
garbage in, garbage out.
Traduisible, par :
de la merde en entrée, de la merde en sortie.
Dans votre cas le non respect de la 1ere forme normale (mélange de deux
informations dans la même colonne) va se traduire par une requête
complexe horriblement couteuse, alors qu'il aurait été si simple de
faire deux colonnes.
Et si, VOUS POUVEZ FAIRE AUTREMENT ! Il suffit de respecter les
principes du développement base de données en dissociant la couche
physique de la couche logique et inversement.

Par exemple dans le champs de saisie de cette référence, on capture
chaque caractères. Tant qu'il est strictement alpha on le met dans la
colonne 1, dès qu'il devient nombre on le met dans la colonne 2, ceci
étant "transparent" dans lIHM :
à la saisie comme indiqué,
à l'affiche par le biais d'une vue qui recolle les deux colonnes !
Étonnement simple non ????

Alors pour votre requête :

SELECT *
FROM MARCHANDISE
ORDER BY MARC_CODEALPHA,
CASE ISNUMERIC(MARC_CODENUM)
WHEN 1
THEN CAST(MARC_CODENUM AS NUMERIC(38,0))
ELSE 99999999999999999999999999999999999999
END

A +



bruno a écrit :
> Bonjour,
>
> J'ai un problème de tri sur un champ alphanumérique qui contient du


numéique
> et de l'alphanumerique.
> Je sais, ce n'est pas bien, mais je ne peux vraiment pas faire autrement


car
> ce sont des donnees imposees par les fournisseurs.
>
> Je souhaiterais pouvoir trier avec, d'abord, tous les numériques triés


dans
> un ordre numériques et ensuite les alpha triés par ordre alphabétique.
> Est-ce possible et si oui comment ?
>
> Pouvoir obtenir quelque chose du genre
>
> PAM 1
> PAM 2
> PAM 3
> PAM 10
> PAM 100
> PAM A
> PAM D1
> ...
> RS 1
> RS 2
> ...
> RS 100
> ...
> RS 1000
> ...
> RS BAGUE
> ...
>
> Merci
>
> CREATE TABLE [dbo].[MARCHANDISE](
> [MARC_ID] [int] IDENTITY(1,1) NOT NULL,
> [MARC_CODEALPHA] [varchar](50) NOT NULL,
> [MARC_CODENUM] [varchar](50) NOT NULL,
> [MARC_CODEARTICLE] AS (([MARC_CODEALPHA]+' ')+[MARC_CODENUM]),
> [MARC_CODETRI] AS
>


(([MARC_CODEALPHA]+replicate('0',(25)-len([MARC_CODENUM])))+[MARC_CODENUM]),
> CONSTRAINT [PK_MARCHANDISE] PRIMARY KEY CLUSTERED
> (
> [MARC_ID] ASC
> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY > > OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
> ) ON [PRIMARY]
> GO
>
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','1')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','2')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','3')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','10')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','11')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','12')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','A')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','B')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','98')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','99')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','D1')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','D2')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','100')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','101')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','P350')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','P2403')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('PAM','MOSDOLBG')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','1')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','2')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','3')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','100')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','101')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','CDO')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','1000')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','BAGUE')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','3700')
> GO
> INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
> VALUES('RS','3700 S/VA')
> GO
>
>


--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Avatar
Fred BROUARD
bruno a écrit :
Merci Fred,

Mais dans le type de données que j'ai, j'ai aussi des codes qui ressemblent
à
AIRLUX LV3900H ou ALCA P/5A01012P

dans lesquels les alpha et numériques sont mélangés dans la deuxième partie
du code.

En adaptant légèrement votre requete pour trier correctement (ou à peu près)
les alpha après les numériques cela fonctionne

SELECT *
FROM MARCHANDISE
where marc_codealpha='colles'
ORDER BY MARC_CODEALPHA,
CASE ISNUMERIC(MARC_CODENUM)
WHEN 1
THEN CAST(MARC_CODENUM AS NUMERIC(38,0))
ELSE 99999999999999999999999999999999999999
END,
CASE ISNUMERIC(MARC_CODENUM)
WHEN 0
THEN MARC_CODENUM
ELSE 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
END


Pensez-vous que ce serait possible de faire une colonne calculée qui
permettrait de trier toujours sur cette colonne (comme j'avais tenté de le
faire sur la colonne marc_codetri) ?
Et si oui pensez-vous que ce serait très couteux en terme de temps
d'exécution ?



le cout sera toujours le même, mais reporter aux insert / update.

A +

Merci encore

Bruno




"Fred BROUARD" wrote in message
news:%23GDJV3w$
Bonjour,

tout est possible en SQL. Mais un principe simple dit la chose suivante :
garbage in, garbage out.
Traduisible, par :
de la merde en entrée, de la merde en sortie.
Dans votre cas le non respect de la 1ere forme normale (mélange de deux
informations dans la même colonne) va se traduire par une requête
complexe horriblement couteuse, alors qu'il aurait été si simple de
faire deux colonnes.
Et si, VOUS POUVEZ FAIRE AUTREMENT ! Il suffit de respecter les
principes du développement base de données en dissociant la couche
physique de la couche logique et inversement.

Par exemple dans le champs de saisie de cette référence, on capture
chaque caractères. Tant qu'il est strictement alpha on le met dans la
colonne 1, dès qu'il devient nombre on le met dans la colonne 2, ceci
étant "transparent" dans lIHM :
à la saisie comme indiqué,
à l'affiche par le biais d'une vue qui recolle les deux colonnes !
Étonnement simple non ????

Alors pour votre requête :

SELECT *
FROM MARCHANDISE
ORDER BY MARC_CODEALPHA,
CASE ISNUMERIC(MARC_CODENUM)
WHEN 1
THEN CAST(MARC_CODENUM AS NUMERIC(38,0))
ELSE 99999999999999999999999999999999999999
END

A +



bruno a écrit :
Bonjour,

J'ai un problème de tri sur un champ alphanumérique qui contient du




numéique
et de l'alphanumerique.
Je sais, ce n'est pas bien, mais je ne peux vraiment pas faire autrement




car
ce sont des donnees imposees par les fournisseurs.

Je souhaiterais pouvoir trier avec, d'abord, tous les numériques triés




dans
un ordre numériques et ensuite les alpha triés par ordre alphabétique.
Est-ce possible et si oui comment ?

Pouvoir obtenir quelque chose du genre

PAM 1
PAM 2
PAM 3
PAM 10
PAM 100
PAM A
PAM D1
...
RS 1
RS 2
...
RS 100
...
RS 1000
...
RS BAGUE
...

Merci

CREATE TABLE [dbo].[MARCHANDISE](
[MARC_ID] [int] IDENTITY(1,1) NOT NULL,
[MARC_CODEALPHA] [varchar](50) NOT NULL,
[MARC_CODENUM] [varchar](50) NOT NULL,
[MARC_CODEARTICLE] AS (([MARC_CODEALPHA]+' ')+[MARC_CODENUM]),
[MARC_CODETRI] AS





(([MARC_CODEALPHA]+replicate('0',(25)-len([MARC_CODENUM])))+[MARC_CODENUM]),
CONSTRAINT [PK_MARCHANDISE] PRIMARY KEY CLUSTERED
(
[MARC_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY >>> OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','3')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','10')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','11')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','12')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','A')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','B')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','98')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','99')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','D1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','D2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','100')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','101')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','P350')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','P2403')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('PAM','MOSDOLBG')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','1')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','2')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','100')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','101')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','CDO')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','1000')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','BAGUE')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3700')
GO
INSERT INTO [MARCHANDISE] ([MARC_CODEALPHA],[MARC_CODENUM])
VALUES('RS','3700 S/VA')
GO





--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************








--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************