Bonjour
Sous SQL server 2005 et avec la table suivante
Je voudrais obtenir 50 lignes avant et 50 après d'une valeur cible
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE TABLE [dbo].[T_ARTICLES_ART]( [ART_ID] [bigint] IDENTITY(1,1) NOT NULL, [ART_STYPE] [smallint] NULL, [ART_FAMILLE] [dbo].[D_FAMILLE_ARTICLE] NULL, [ART_REF_CONSTR] [dbo].[D_REF_ARTICLE] NULL, [ART_LIBELLE] [dbo].[D_LIBELLE_ARTICLE] NULL, [ART_PU] [dbo].[D_MT_MONETAIRE] NULL, [ART_PU_BASE] [dbo].[D_MT_MONETAIRE] NULL, CONSTRAINT [PK_T_ARTICLES_ART] PRIMARY KEY CLUSTERED ( [ART_ID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO
par rapport à un index, par exemple pour la valeur cible
ART_FAMILLE = 'MERL' et ART_REF_CONSTR = '01019'
J'essaie avec ceci
Mais cela ne fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT TOP 50 -1 AS RANG, * FROM T_ARTICLES_ART WHERE ART_FAMILLE + ART_REF_CONSTR < 'MERL01019' UNION SELECT 0 AS RANG, * FROM T_ARTICLES_ART WHERE ART_FAMILLE ='MERL' AND ART_REF_CONSTR = '01019' UNION SELECT TOP 50 1 AS RANG, * FROM T_ARTICLES_ART WHERE (ART_FAMILLE + ART_REF_CONSTR) > 'MERL01019'
il faudrait pour les 50 lignes qui précédent utiliser
ORDER BY ART_FAMILLE, ART_REF_CONSTR DESC et
pour les 50 lignes qui suivent utiliser
ORDER BY ART_FAMILLE, ART_REF_CONSTR mais le union ne semble pas
autoriser un ORDER BY à l'intérieur
et d'autre part si je scinde ma requête
Ne ramène pas les 50 lignes qui précédent mais le début de ma table
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT TOP 50 -1 AS RANG, * FROM T_ARTICLES_ART WHERE ART_FAMILLE + ART_REF_CONSTR < 'MERL01019' ORDER BY ART_FAMILLE, ART_REF_CONSTR DESC
Je peux utiliser une PS pour la limitation sur le order by, mais cela ne me solutionne pas le problème du retour des 50 lignes avent
Quelqu'un à t'il une idée et envie de m'aider SVP?
Partager