Bonjour,
Je cherche un moyen pour afficher par ex :
Table_exemple
ID
----
1
2
3
4
5
6
7
8
Le where serait : id = 5
et je souhaite afficher :
34567
Avez vous une idée ?
Bonjour,
Je cherche un moyen pour afficher par ex :
Table_exemple
ID
----
1
2
3
4
5
6
7
8
Le where serait : id = 5
et je souhaite afficher :
34567
Avez vous une idée ?
La solution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE TABLE Table_exemple (ID INT) INSERT INTO Table_exemple VALUES (1), (2), (3), (4), (5), (6), (7), (8);
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 WITH T0 AS (SELECT ID, ROW_NUMBER() OVER(ORDER BY ID) AS N FROM Table_exemple) SELECT ID FROM T0 WHERE N BETWEEN (SELECT N FROM T0 WHERE ID = 5) - 2 AND (SELECT N FROM T0 WHERE ID = 5) + 2
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Bonjour,
++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 DECLARE @p INT = 6; WITH T(ID) AS ( SELECT * FROM ( VALUES (1),(2),(3),(4),(5),(6),(7),(8) ) AS X(T) ) SELECT * FROM T WHERE ID BETWEEN @p -2 AND @p + 2
arf me suis planté de topic, c en mysql qu'il me faut ça pas en sql serv sorry
En fait c'est un peu plus compliqué :
je n'aurais pas du mettre d'id un autre exemple plus parlant :
Where = "xxx"
ADRESSES
----------
zzz
eee
rrr
xxx
yyy
fff
aaa
rrr
Pareil je voudrais trouver dans l'ordre :
eee
rrr
xxx
yyy
fff
Dans ce cas là la solution proposée par SQLPro semble la plus adaptée :
++
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
16
17
18
19
20 WITH T(ID) AS ( SELECT * FROM ( VALUES ('zzz'),('eee'),('rrr'),('xxx'),('yyy'),('fff'),('aaa'),('rrr') ) AS X(T) ), T_NUM AS ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS n, ID FROM T ) SELECT ID FROM T_NUM WHERE n BETWEEN (SELECT n - 2 FROM T_NUM WHERE ID = 'xxx') AND (SELECT n + 2 FROM T_NUM WHERE ID = 'xxx')
merci et en traduction mysql tu saurais ce que ça donne
Les fonctions de fenêtrage (ROW_NUMBER OVER) n'existent pas en MySQL.
Il définir de quelle manière on classe les données pour pouvoir extraire les deux précédentes et les deux suivantes. Notamment dans ton exemple, qu'est-ce qui justifie que fff arrive après xxx et yyy ?
Et plutôt que de parler de choses abstraites, dis-nous plus concrètement de quoi il s'agit avec la description de la table réelle et un jeu de données éventuellement fictif si les données sont trop confidentielles.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager