Faire des blocs de ligne

ehmarc Messages postés 393 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 29 septembre 2008 - 18 sept. 2006 à 12:19
ehmarc Messages postés 393 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 29 septembre 2008 - 27 sept. 2006 à 23:32
Salut,

Voila j'ai encor un soucis....

Je doit faire des group de 15000 ligne de donnée (ma table à 90 000 lignes)
Sous SQL server c'est pas top (à cause du top justement...)

Bon le but est simple toutes les 15000 ligne, jedoit ramener la somme d'un champ !

Bon plusieurs solution m'ont sauté à l'esprit :
- 1 rajouté un champ de comptage qui s'incrémente toutes les 15000 lignes (ce qui me permet ensuite de faire un group by sur ce champ avec le sum)
j'ai tenté de faire un update mais je sais pas récupérer le "max" de mon champ pour l'incrémenter
update PS_MM_LIGNE set COMPTEUR MAX(COMPTEUR)+1 select top 15000 DD_AMT_BASE from PS_MM_LIGNE where COMPTEUR 0

- 2 un select magique, mais j'ai pas trouvé
- 3 en dur dans mon code (mais il faut que je recalcul tout les trucs bref galere)

++

"Aucun de nous ne sait ce que nous savons tous, ensemble." Lao Tseu inventeur du "copier coller" [8D]

3 réponses

ehmarc Messages postés 393 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 29 septembre 2008
18 sept. 2006 à 15:20
Bon je m'auto répond (à prioris sa passe mais j'ai pas les droits sous l'analyseur de requete donc faut que je teste dans mon prog)

 
 UPDATE MM_LIGNE
  SET COUNTER = (
 SELECT MAX(COUNTER)+1
  FROM MM_LIGNE
  GROUP BY COUNTER
  HAVING COUNT(*)=15000)
 SELECT top 15000 COUNTER
  FROM MM_LIGNE
 WHERE COUNTER = 0

++

"Aucun de nous ne sait ce que nous savons tous, ensemble." Lao Tseu inventeur du "copier coller" [8D]
0
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
22 sept. 2006 à 19:59
C'est en 2000 ou 2005 ?

Si c'est du 2005 regarde vers les PARTITION BY il y une fonction NTILE qui pourrait bien te servir, ou l'une des autres...

Si j'ai bien compris tu veux faire des totaux tous les 15000 enregistrements  ? Avec une condition sur le group by ou pas, c'est à dire des sous-totaux par rappoprt à un ensemble de champs ?

Si c'est le cas tu as ROLLUP qui peut être utilisé après un GROUP BY

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
0
ehmarc Messages postés 393 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 29 septembre 2008
27 sept. 2006 à 23:32
en fait j'ai utilisé deux requete (un voyage m'as empeche de repondre plus tot j'ai bien le droit a des vacances aussi)
un select pour voir si il reste minimum une ligne

et ensuite je fait :
SET ROWCOUNT 15000
mon update
SET ROWCOUNT 0

++

"Aucun de nous ne sait ce que nous savons tous, ensemble."
Lao Tseu inventeur du "copier coller" [8D]
0
Rejoignez-nous