0
votes

Calculez la valeur de la ligne basée sur une formule différente

Je veux calculer les valeurs de cellule en fonction de la formule donnée dans chaque ligne.

Entrée d'entrée est:

Table de formule de niveau de ligne

L'OUPUT attendue est:

sortie attendu


9 commentaires

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


Chaque sl 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 à l'intérieur d'une fonction


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.


3 Réponses :


0
votes

Avez-vous consulté l'affaire / lorsque l'expression? Voir MS doc: case

Donc, votre requête serait une fois comme: xxx

Vous n'avez pas fourni les critères, donc j'ai dû deviner :-)

(Je n'ai pas exécuté la requête depuis que je n'avais pas de serveur à portée de main :-))

Mise à jour après commentaire par OP:

Si vous avez 71 colonnes différentes pour le public dans la même table, vous avez un problème différent IMHO.

alors ma solution serait:

  • Séparez le numéro d'audience à une table de détail avec SL , Audience_Type et Audience_Count
  • Créer un Audience_calc_config Tableau avec deux colonnes calc_method et audience_type
  • Pour chaque type de calcul et d'audience, ajoutez une entrée à ce qui précède Table
  • Supprimer la formule de la table d'origine et remplacez-la par appropriée calc_method
  • puis exécutez une sélection simple avec un joindre , Groupe par SL et Somme (Public)
  • (bien sûr, il serait même plus agréable de diviser l'audience_calc à un Master / Détail, vous pouvez donc avoir une clé étrangère ...)

1 commentaires

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.



0
votes

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


0 commentaires

1
votes

La première chose est votre formule n'est pas correcte. Si je comprends bien, il y a une ligne unique pour chaque sl . Et pour faire le somme de col1 et col2 formule correcte est (col1 + col2) . Donc, corrigez cette chose d'abord.

Après cela, vous pouvez implémenter cela à l'aide de dynamique SQL SQL comme xxx

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. xxx


0 commentaires