J'ai besoin d'aide avec SQL Server sur la manière de distribuer une valeur de table d'en-tête à une autre table plusieurs lignes avec le même ID: -
Tableau A: - P>
Id | Value | Qty -------------------- 1 | 20 | 20 1 | 20 | 13 2 | 21 | 1
5 Réponses :
Ceci ci-dessous la logique distribuera la valeur de manière égale à toutes les lignes.
Id Qty Value 1 20 40 1 13 40 2 1 21
Si je dispose de 1 L enregistrer une requête supérieure sera lente car nous utilisons la requête dans Sélectionner une instruction
Quelle est votre exigence réelle? Distribuer 40 parmi les lignes? Ou simplement ajouter 40 à chaque rangée avec le même identifiant?
WITH TblA
AS (SELECT 1 AS id,
40 AS num
UNION
SELECT 2,
21),
TblB
AS (SELECT 1 AS id,
20 AS num
UNION
SELECT 1,
13
UNION
SELECT 2,
1)
SELECT *
FROM TblA a
INNER JOIN TblB b ON a.id = b.id;
Variables de table de substitution @header et @Detail avec vos tables et supprimez les relevés d'insertion. Vous pouvez également le faire avec une sous-requête à votre requête principale, comme proposé dans certaines des autres réponses, mais pour des tables plus importantes, il peut devenir lent, d'où la variable de table appelée @counter à rassembler le compte agrégé basé sur la variable de table @Detail.
Il suffit d'utiliser une fonction de fenêtre pour diviser la valeur:
select tb.id, ta.value * 1.0 / count(*) over (partition by ta.id) as value, tb.qty
Cela ressemble à une jointure simple, pas de distribution non plus. Il n'y a pas d'en-tête non plus. Le premier résultat devrait être
40 code>, pas20 code>Je parle de la distribution de valeur sur la table B de la table A où a.id = b.id
Vous n'avez montré aucune sorte de distribution. Un simple
SELECT * à partir d'une join interne B sur a.id = b.id code> retournera les résultats que vous voulezVoir la valeur que j'ai besoin de valeur égale contre ID