Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Obtenir 30 éléments...

6 réponses
Avatar
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

6 réponses

Avatar
SQLpro
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 wrote:
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


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

Nan ?

Jérôme
Avatar
SQLpro
On 12 juin, 10:23, llopht wrote:
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 +
Avatar
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
Avatar
SQLpro
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 wrote:
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


Avatar
llopht
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 :)