Résultat de colonne calculé SQL Server 2005 provenant de l'agrégation d'une autre valeur de champ de table

StackOverflow https://stackoverflow.com/questions/166518

Question

Désolé pour le titre de la question longue.

Je suppose que je suis sur un perdant sur celui-ci mais sur la chance.

Est-il possible de faire du calcul d'un champ calculé dans une table le résultat d'une fonction d'agrégat appliquée à un champ d'une autre table.

c'est-à-dire

Vous avez une table appelée "mug", elle a un enfant appelé "couleur" (ce qui me fait mal à la tête au Royaume-Uni mais le vendeur vient des États-Unis, ce que vous allez faire?) et ceci, à son tour, a enfant appelé 'taille'. Chaque table a un champ appelé vendu.

La taille.sold incrémente de 1 pour chaque tasse d'une couleur et d'une taille particulière vendue.

Vous voulez que color.sold soit un agrégat de SUM size.sold WHERE size.colorid = color.colorid

Vous voulez que mug.sold soit un agrégat de SUM color.sold WHERE color.mugid = mug.mugid

Y at-il un moyen de faire en sorte que mug.sold et color.sold se débrouillent tout seuls ou est-ce que je vais devoir me débrouiller avec des déclencheurs?

Était-ce utile?

La solution

vous ne pouvez pas avoir une colonne calculée référençant directement une table différente, mais vous pouvez la faire référencer une fonction définie par l'utilisateur. voici un lien vers un exemple d'implémentation d'une solution comme celle-ci.

http://www.sqlservercentral.com/articles/User -Défini + fonctions / complexcomputedcolumns / 2397 /

Autres conseils

Non, ce n'est pas possible. Une colonne calculée ne peut être dérivée que des valeurs d'autres champs de la même ligne. Pour calculer un agrégat à partir d'une autre table, vous devez créer une vue.

Si votre application doit afficher les statistiques, posez les questions suivantes:

  1. Est-il vraiment nécessaire de montrer cela en temps réel? Si oui, pourquoi? Si cela est vraiment nécessaire, vous devrez alors utiliser des déclencheurs pour mettre à jour une table. Ceci renvoie à un bref article de Wikipédia sur la dénormalisation. Les déclencheurs affecteront les performances d'écriture sur les mises à jour de table et s'appuieront sur l'activation des déclencheurs.
  2. Si cela n’est nécessaire que pour les rapports, vous pouvez effectuer le calcul dans une vue ou un rapport.
  3. S'il est nécessaire de prendre en charge de fréquents rapports ad-hoc, vous êtes peut-être dans les domaines d'un data mart et d'un processus ETL au jour le jour.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top