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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 <llo...@libertysurf.fr> 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.
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
llopht
Humm parfait sinon que plus possible d'obtenir 30 valeurs aléatoires de cette façon :):)
Nan ?
Jérôme
Humm parfait sinon que plus possible d'obtenir 30 valeurs aléatoires de
cette façon :):)
Humm parfait sinon que plus possible d'obtenir 30 valeurs aléatoires de cette façon :):)
Nan ?
Jérôme
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 +
On 12 juin, 10:23, llopht <llo...@libertysurf.fr> 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().
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
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
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
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
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
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 <llo...@libertysurf.fr> 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
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
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 :)
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 :):):):)