J'ai une table code> FOO code> avec les attributs suivants: étant donné qu'un exemple d'enregistrement est: p> Je veux que la sortie de la requête soit p> en d'autres termes, la colonne J'ai réussi à compter le nombre de Cependant, je n'ai aucune idée de la manière dont je vais appliquer ceci à la division du prix code >. P> merci! p> p> code> doit être le résultat de: < Code> prix / n code> où n est le nombre de fois que la barre code> indiquée code> existe dans le jeu d'enregistrements. p> Barres code> qui existent en utilisant: p>
3 Réponses :
Vous pouvez utiliser les fonctions de fenêtre et la division: Demo H2> P> Notez que SQL Server fait une division entière. Donc si édition: p> Le titre dit "Mise à jour", mais la question ne mentionne que des résultats. Si vous souhaitez une mise à jour, utilisez une CTE ou une sous-requête mise à jour: P> prix code> est un entier, vous pouvez obtenir un résultat plus précis avec: p> with toupdate as (
select t.*,
price / count(*) over (partition by bar) as new_price
from t
)
update toupdate
set new_price = price
where price <> new_price;
C'est probablement la meilleure réponse ici +1, et je l'aurais donné moi-même, s'attendre à ce que Gordon soit en fait un programme AI créé par le débordement de la pile.
Hey Stackoverflow. . . Si vous souhaitez créer un tel programme AI, je serais ravi d'aider.
D'accord avec @TimbieGeleisen!
Merci beaucoup!! Cette solution était parfaite! La modification était également pertinente, car comme vous l'avez mentionné, j'ai oublié d'ajouter la partie de mise à jour sur la question (désolé de cela)!
Très drôle de discussion! Personnellement, j'ai vraiment considéré Gordon étant une AI, surtout le mois dernier lorsque j'ai commencé à suivre la balise SQL ... Merci de la scolarisation Gordon!
Utilisez une sous-requête corrélée pour calculer le diviseur:
fooid | bar | (No column name)
----: | --: | ---------------:
1 | 332 | 5
2 | 332 | 5
3 | 333 | 5
4 | 334 | 10
4 | 334 | 10
4 | 334 | 10
Vous pouvez utiliser un CTE qui trouve les comptes pour chaque groupe code> bar code>, puis rejoignez-le pour trouver les quotients:
WITH cte AS (
SELECT Bar, COUNT(*) AS cnt
FROM yourTable
GROUP BY Bar
)
SELECT t1.FooID, t1.Bar,
1.0 * t1.Price / t2.cnt AS NewPrice
FROM yourTable t1
INNER JOIN cte t2
ON t1.Bar = t2.Bar
ORDER BY
t1.Bar, t1.FooID;
Personnellement, je ne stockerais pas de valeurs comme celle-ci dans la base de données. La principale raison étant que vous devez mettre à jour chaque ligne avec cet identifiant (
bar code>) chaque fois qu'une rangée insérée, supprimée ou mise à jour. Cela va probablement nécessiter des déclencheurs. Vous seriez probablement mieux à l'aide d'une vuecode>.Et que se passe-t-il quand une barre donnée a des prix différents? Quel prix utilisez-vous dans votre calcul? Supposez-vous que tous les prix sont les mêmes pour un barreau donné? Est-ce une hypothèse sûre B>?