Obtenir 30 éléments...

Le
llopht
Salut à tous,

Sous SQL2000, dans une table structurée de la façon suivante :

Id Element Groupe
1 AA 0
2 BB 1
3 CC 0
4 DD 2
5 EE 2
6 FF 0


Comment récupérer une liste de 30 éléments pour chaque Groupe ?

J'ai tenté :

SELECT
A.Groupe,
B.Id
FROM
T_Matable A,
(
SELECT TOP 30
*
FROM
T_Matable
ORDER BY
NEWID()
) B
WHERE
A.Groupe = B.Groupe
GROUP BY
A.Groupe,B.Id

Mais B renvoi les 30 mêmes éléments, donc la multiplication par le
Groupe ne fonctionne pas
A noté que NEWID est là pour me renvoyer 30 éléments aléatoirement.

Merci pour votre aide.

Jérôme
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SQLpro
Le #11878701
Quelque chose comme :

SELECT *
FROM (SELECT T1.groupe, T1.ID, COUNT(*) AS N
FROM T_Matable AS T1
INNER JOIN T_Matable AS T2
ON T1.ID >= T2.ID
AND T1.groupe = T2.groupe
GROUP BY T1.ID, T1.groupe) AS T
WHERE N <= 30

A +

On 11 juin, 16:35, llopht
Salut à tous,

Sous SQL2000, dans une table structurée de la façon suivante :

Id Element Groupe
1 AA 0
2 BB 1
3 CC 0
4 DD 2
5 EE 2
6 FF 0
...

Comment récupérer une liste de 30 éléments pour chaque Groupe ?

J'ai tenté :

SELECT
A.Groupe,
B.Id
FROM
T_Matable A,
(
SELECT TOP 30
*
FROM
T_Matable
ORDER BY
NEWID()
) B
WHERE
A.Groupe = B.Groupe
GROUP BY
A.Groupe,B.Id

Mais B renvoi les 30 mêmes éléments, donc la multiplication par le
Groupe ne fonctionne pas...
A noté que NEWID est là pour me renvoyer 30 éléments aléatoireme nt.

Merci pour votre aide.

Jérôme


llopht
Le #11878691
Humm parfait sinon que plus possible d'obtenir 30 valeurs aléatoires de
cette façon :):)

Nan ?

Jérôme
SQLpro
Le #11878631
On 12 juin, 10:23, llopht
Humm parfait sinon que plus possible d'obtenir 30 valeurs aléatoires de
cette façon :):)

Nan ?

Jérôme



si, il suffit d'utiliser la colonne aléatoire comme comparaison dans
la jointure, mais dans ce cas remplacer les appels directe de la table
par un appel à table dérivée incluant le calcul de NEWID().

A +
llopht
Le #11878591
Comment fais tu une comparaison avec la colonne aléatoire, j'obtiens une
erreur de cast, je dois pas faire le bon truc... Bon j'ai dérivé la
table ça je pense que j'ai bon... mais pour la comparaison je coince.

SELECT
*
FROM
(
SELECT
T1.groupe,
T1.ID,
COUNT(*) AS N
FROM
T_Matable AS T1
INNER JOIN
(
SELECT TOP 100 PERCENT
ID,
group
FROM
T_MaTable
ORDER BY
newid()
) AS T2 ON
T1.ID >= T2.ID
AND
T1.groupe = T2.groupe
GROUP BY
T1.ID,
T1.groupe
) AS T
WHERE
N <= 30
SQLpro
Le #11878561
Enlève le top 100 et le Order by

Place la même requête en table dérivée dans le premier T_matable.

A +

On 12 juin, 14:38, llopht
Comment fais tu une comparaison avec la colonne aléatoire, j'obtiens une
erreur de cast, je dois pas faire le bon truc... Bon j'ai dérivé la
table ça je pense que j'ai bon... mais pour la comparaison je coince.

SELECT
*
FROM
(
SELECT
T1.groupe,
T1.ID,
COUNT(*) AS N
FROM
T_Matable AS T1
INNER JOIN
(
SELECT TOP 100 PERCENT
ID,
group
FROM
T_MaTable
ORDER BY
newid()
) AS T2 ON
T1.ID >= T2.ID
AND
T1.groupe = T2.groupe
GROUP BY
T1.ID,
T1.groupe
) AS T
WHERE
N <= 30


llopht
Le #11878531
Ahhhhhhh :)

Attends je suis perdu maintenant :):)

Si j'enlève le top 100, le ORDER BY NEWID() ne peux plus fonctionner :):)

J'arrive pas à comprendre cette satanée requête :):):):)

Ok je suis un boulet :)
Publicité
Poster une réponse
Anonyme