Requête une ligne sur deux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requête une ligne sur deux

par Ryle » 20 avr. 2009, 14:44

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...

par Mayzz » 17 avr. 2009, 22:37

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

par Ryle » 17 avr. 2009, 15:17

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 ?

par Sékiltoyai » 17 avr. 2009, 14:29

J'y ai pensé aussi, mais si deux requêtes se produisent en même temps, il risque d'y avoir un problème…

par mojorisin » 17 avr. 2009, 13:42

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.

par Kemper » 17 avr. 2009, 09:15

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.

Requête une ligne sur deux

par Mayzz » 16 avr. 2009, 17:49

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 !