Je veux calculer les valeurs de cellule en fonction de la formule donnée dans chaque ligne. P>
Entrée d'entrée est: p>
p>
L'OUPUT attendue est: p>
p>
3 Réponses :
Avez-vous consulté l'affaire / lorsque l'expression? Voir MS doc: case
Donc, votre requête serait une fois comme: p> Vous n'avez pas fourni les critères, donc j'ai dû deviner :-) P> (Je n'ai pas exécuté la requête depuis que je n'avais pas de serveur à portée de main :-)) p> Mise à jour après commentaire par OP: strong> p> Si vous avez 71 colonnes différentes pour le public dans la même table, vous avez un problème différent IMHO. P> alors ma solution serait: p>
SL code>,
Audience_Type Code> et Audience_Count LI>
Audience_calc_config code> Tableau avec deux colonnes calc_method code> et audience_type code> li> li>
joindre code>, Groupe par SL code> et Somme (Public) Code> Li>
Il doit être générique et le cas ne peut pas dépendre de la valeur de la ligne (qui peut changer à tout moment). J'ai 71 catégories d'audience et une déclaration de cas peut ne pas aider car la formule de la table de base peut changer.
Je pense que vous voulez quelque chose comme ceci:
select *,case when row_cal like '%1%' and row_cal like '%2%' then value1 + value2
when row_cal like '%1%' and row_cal like '%3%' then value1 + value3
end as result from YourTable
La première chose est votre formule n'est pas correcte. Si je comprends bien, il y a une ligne unique pour chaque Après cela, vous pouvez implémenter cela à l'aide de dynamique SQL SQL comme p> ou si la formule d'édition n'est pas une option pour vous, alors vous pouvez essayer ceci, Mais assurez-vous que vous n'avez qu'une ligne pour chaque identifiant et ses valeurs correspondantes, sinon elle résumera toutes les lignes similaires d'une. P> sl code>. Et pour faire le somme code> de col1 code> et col2 code> formule correcte est (col1 + col2) code>. Donc, corrigez cette chose d'abord.
Quelle est la logique de sélection de l'auditoire _2 et audience _3
Il peut s'agir d'une combinaison, un calcul sage de ligne (colonne de résultat) devrait se produire en fonction de la formule donnée dans le Row_Cal. La formule peut changer pour chaque ligne de cette colonne
Vous devrez analyser la formule, la calculer et cette tâche n'est pas facile à implémenter dans
SQL Server code>Chaque
sl code> est unique, une seule ligne de votre table?Oui, c'est une valeur unique et une colonne d'identité unique
S'il existe un nombre limité de valeurs possibles pour Row_Col, vous pouvez utiliser une déclaration de cas. Sinon, vous devrez utiliser SQL dynamique dans un curseur. Veuillez noter que la somme est une fonction agrégée dans SQL, alors que vos exemples sont un ajout simple. Si vous descendez de la route SQL dynamique, vous devrez supprimer la somme () si vous laissez votre ligne_col comme ceci.
@Squirrel: Oui, je suppose que cela doit analyser une fonction pouvant obtenir des résultats pour chaque ligne. Mais la mise en œuvre est peu délicate. Puis-je réaliser à travers n'importe quel SQL dynamique
Remarque: vous ne pouvez pas utiliser
dynamique sql code> à l'intérieur d'une fonctioncode>Cela comporte les coordonnées d'un XY Problème . Il peut y avoir une bien meilleure solution au problème plus large que vous essayez de résoudre.