SQL Server Référence à une Colonne Calculée
J'ai une instruction select avec des colonnes calculées et je voudrais utiliser la valeur d'une colonne calculée dans l'autre. Est-ce possible? Voici un exemple artificiel pour montrer ce que je suis en train de faire.
SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
- Je suis dans le même bateau.. l'Enfer SQL server.. MS Access peuvent le faire. Et notre entreprise, les utilisateurs peuvent calculer quelque chose que vous avez dit dans la question et se demande pourquoi je ne peut pas le faire en SQL.
Vous devez vous connecter pour publier un commentaire.
Pas.
Tous les résultats d'une seule ligne à partir d'une sélection sont atomiques. Qui est, vous pouvez les afficher tous, comme s'ils se produisent en parallèle et ne dépendent les uns des autres.
Si vous faites référence à des colonnes calculées, alors vous avez besoin de mettre à jour la formule de l'entrée pour que le résultat du changement au cours d'une sélection.
Pense de colonnes calculées comme des macros ou des mini-vues qui injectent un peu de calcul à chaque fois que vous les appelez.
Par exemple, ces colonnes sont identiques, toujours:
Également garder à l'esprit que la
persisted
option permet de ne pas changer tout cela. Il conserve la valeur autour de ce qui est agréable pour l'indexation, mais l'atomicité ne change pas.Malheureusement pas vraiment, mais une solution de contournement qui vaut parfois il est
Oui c'est possible.
Utiliser le AVEC la Déclaration pour imbriqués sélectionne:
Deux façons que je peux penser à le faire. D'abord comprendre que le calval1 la colonne n'existe pas autant que SQL Server est concerné jusqu'à ce que l'instruction est exécutée, elle ne peut donc pas être directement utilisés comme showning votre exemple. Ainsi, vous pouvez placer le calcul en deux fois, une fois pour calval1 et une fois en tant que substitut de calcval1 dans le calval2 de calcul.
L'autre façon est de faire une table dérivée avec calval1 en elle, puis de calculer calval2 à l'extérieur de la table dérivée quelque chose comme:
Vous aurez besoin de tester à la fois pour la performance.
Vous devez utiliser un extérieur applique en lieu et place d'une sous-sélection:
Vous ne pouvez pas "reset" de la valeur d'une colonne calculée dans une clause Select, si c'est ce que vous essayez de le faire... La valeur d'une colonne calculée est basé sur le calcul de la colonne de formules. Qui PEUT comprendre la valeur d'une autre colonne calculée.... mais vous canlt réinitialiser les formules dans une clause Select... si tout ce que vous voulez faire est de "sortie" de la valeur basée sur deux colonnes calculées, (comme la syntaxe dans vos lectures question", Puis le
"[calcval2]"
dans
serait juste d'en faire un alias de colonne dans la sortie de la Clause Select.
ou demandez-vous comment définir les formules pour une colonne calculée à être basée sur une autre?