Bonjour,
J'ai 1 table "Factures" et 1 autre "factures_lignes"
La requête pour imprimer 1 facture contenant 15 articles me retourne 15 lignes en répétant 15 fois les infos de la facture (N°, date, client...) (FROM Factures INNER JOIN factures_lignes).
Parmis les colonnes qui doivent figurer sur la facture, 3 sont calculées via 1 fonction assez lourde (disons par exemple des stats sur les achats précédents du client qui figurent en pied de facture).
Ex. : Select F.Num, F.Date, fnPalmares(1), fnPalmares(2), fnPalmares(3), FL.Article, FL.Pu, FL.Quant
Comment éviter de calculer x fois ces colonnes (15 dans cet exemple) pour chaque facture.
(en réalité la requête me retourne toutes les factures du mois (de 200 à 1000) ce qui accroit le problème mais j'ai parlé d'1 pour simplifier)
J'ai appelé la fonction dans le select mais c'est très long.
J'ai essayé de faire 1 OUTER APPLY dans le FROM mais c'est identique (je pense que ça revient au même que ci-dessus : la requête est calculée pour chaque ligne).
J'ai essayé d'écrire dans une table temporaire sans exécuter les fonctions (mis 0 aux emplacements prévus) puis parcourir cette table groupée par N° de facture avec calcul des fn et update des lignes...aucun gain.
Le temps gagné par l'appel unique est perdu par le travail du curseur et des mises à jour successives de chaque facture.
Si vous avez 1 solution Merci pour votre aide.
(J'utilise SQL Server 2008 R2 mais je peut upgrader si nécessaire)
PS : désolé si le titre n'est pas très explicite, pas facile d'expliquer en peu de mots...
Partager