0
votes

Distribuez une valeur de table d'en-tête à une autre table plusieurs rangées avec le même identifiant

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  


4 commentaires

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 , pas 20


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 retournera les résultats que vous voulez


Voir la valeur que j'ai besoin de valeur égale contre ID


5 Réponses :


0
votes

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


2 commentaires

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?



0
votes
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;

0 commentaires

0
votes

Veuillez essayer avec ce joint simple xxx

exemple complet (image de cocher): xxx

 Entrez la description de l'image ici


2 commentaires

En résultat, la valeur devrait être 20 pour ID 1


@ Niteeshkumar, veuillez vérifier la solution mise à jour pour votre sortie souhaitée.



0
votes

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

 Entrez la description de l'image ici


0 commentaires

0
votes

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


0 commentaires