Page 1 sur 1
Requête une ligne sur deux
Posté : 16 avr. 2009, 17:49
par Mayzz
Bonjour,
Je cherche à faire une requête SQL qui me sélectionnera une ligne sur 2 des données d'une table.
Le problème c'est que les identifiants de lignes sont des GUID. Il n'est donc pas possible de faire une fonction avec un calcul.
De même, il ne m'est pas permis de changer le format de cette table pour y mettre des ID avec N° auto et ne prendre que les paires ou impaires.
Si quelqu'un à une idée...
Merci d'avance !
Posté : 17 avr. 2009, 09:15
par Kemper
Quelle est la règle pour identifier les lignes à sortir ? Car on peut trier les données renvoyées par une requête, mais normalement on ne considère pas que les données dans la table sont organisées d'une façon ou d'une autre.
Posté : 17 avr. 2009, 13:42
par mojorisin
Bonjour,
cela dépend du sgbd. Par exemple sur mysql vous pourriez faire quelque chose comme ceci :
Code : Tout sélectionner
SET @pos := 0;
SELECT *
FROM
table
HAVING (@pos := @pos +1) %2 =0
Ici on utilise une variable utilisateur incrémentée de 1 à chaque tuple parcouru.
Posté : 17 avr. 2009, 14:29
par Sékiltoyai
J'y ai pensé aussi, mais si deux requêtes se produisent en même temps, il risque d'y avoir un problème…
Posté : 17 avr. 2009, 15:17
par Ryle
Quel est le but de la manoeuvre ? parce qu'à première vue, y a pas plus d'intérêt de récupérer un enregistrement sur 2, que récupérer simplement la moitié des enregistrements de la table...
Donc si tu ne souhaites que les lignes paires (ou impaires), c'est qu'il y a bien quelque chose qui distingue les deux et dont tu dois également pouvoir te servir pour filtrer tes résultats ?
Posté : 17 avr. 2009, 22:37
par Mayzz
Bonjour,
Tout d'abord je travail sou MSSQL (SQL SERVER 2005 Express edition) car je développe un site en asp.Net.
En effet, je dois avoir 2 tables remplies par des requêtes SELECT une avec les lignes paires et l'autres impaires, pour l'ordre de sortie, j'aimerai qu'il soit possible de faire un ORDER BY, paramétrable pour chaque table.
J'explique ou du moins j'essaye de détaillé pour ceux qui ne connaissent pas VWD ou Visual Studio.
J'ai sur ma page un composant liste, qui se lie à une base MSSQL, et affiches mes données selon une interface paramétrable (Modèles), via une requête SELECT.
Le souci est que cette liste, n'affiche qu'un seul élément par ligne et pour une question d'espace et d'esthétique je souhaiterai afficher deux résultats par lignes. La solution que j'ai trouvée est donc de créer deux listes séparées par un tableau et de mettre les lignes impaires dans celle de droite et les paires dans celle de gauche. Voila !
Ah heu... j'oubliais, je suis un newb en SQL, je crée mes requêtes toutes simples avec l'assistant de VS.
Merci @ tous
Posté : 20 avr. 2009, 14:44
par Ryle
Je suis pas vraiment convaincu que ce soit la bonne méthode...
Quoi qu'il en soit, pour répondre à ta question, sous MSSQL 2005 tu peux numéroter tes lignes grace à la fonction ROW_NUMBER(), et ainsi distinguer les paires des impaires avec un opérateur modulo :
Code : Tout sélectionner
SELECT * FROM (
SELECT ...., ROW_NUMBER() OVER (ORDER BY ma_colonne) AS compteur
FROM ma_table
WHERE ...
) x
WHERE x.compteur % 2 = 0 -- lignes paires
Tu précises dans le OVER () le ORDER BY suivant lequel les colonnes doivent être numérotées, et tu colles un "x.compteur % 2 = 1" pour récupérer les lignes impaires...