2009-08-17 7 views
1

je les tableaux suivants:ligne courante Référence

TableA 

ID | SomeInt 
1  55 
1  66 
2  77 

TableB 

ID | OtherInt 
1 ComputedBy Field 
2 ComputedBy Field 

Le calculé par champ doit retourner la somme de tableA où TableB.ID = TableA.ID, mais si je dis:

SELECT SUM(SomeInt) from TableA where ID = TableA.Id 

où le premier ID serait l'ID de la table en cours, le dbms dit "nom de champ ambigu entre table Table1 et Table2"

Alors, comment puis-je obtenir l'ID de la ligne en cours afin qu'il ne mélange pas le nom du champ.

Quelque chose comme This.ID, Self.ID, CurrentRow.ID ou quoi que sql utilise

EDIT: Apparemment, je pouvais utiliser le nom de la table actuelle pour faire référence à la colonne

Répondre

3

réponse simple

select tb.id 
     ,sum(ta.someint) 
    from TableA ta 
     inner join TableB tb 
       on ta.id = tb.id 
group by tb.id 

Ceci est un exemple complet de votre problème excuse la syntaxe tsql.

declare @TableA table(id int 
         ,someint int) 

insert @TableA values(1,55) 
insert @TableA values(1,66) 
insert @TableA values(2,77) 

declare @TableB table(id int) 

insert @TableB values(1) 

select tb.id 
     ,sum(ta.someint) 
    from @TableA ta 
     inner join @TableB tb 
       on ta.id = tb.id 
group by tb.id 
0
SELECT B.ID, SUM(A.SomeInt) AS Total 
From TableA A, TableB B where A.ID = B.Id 
GROUP BY B.ID 
+0

-1 A, B syntaxe de jointure –

+0

@Joel: Je ne pouvais pas aider à rire. Bien que je ne sois pas downvoted, pourquoi pensez-vous que je devrais obtenir -1? Cette syntaxe n'est-elle pas compatible avec les bases de données? – shahkalpesh

0

SELECT TableB.ID, SUM(TableA.SomeInt) 
    FROM TableB 
     LEFT OUTER JOIN TableA ON 
      TableB.ID = TableA.ID 
    GROUP BY TableB.ID 

0

Êtes-vous en train de faire TableB ont la somme des valeurs Fleureuse? Les ID existent-ils déjà (il suffit de les mettre à jour) ou avez-vous besoin de remplir TableB à partir de zéro? Je ne comprends pas quel est votre objectif global, et cela affecterait la réponse.

E.G.

  • Mise à jour w/groupe par
  • Insérer
  • Trigger qui met à jour en fonction des TableB changements à tableA
  • Simple select ...

Laissez-moi savoir ce que votre objectif est et nous pouvons obtenir une réponse idéale.

0

Vous pourriez simplement faire "TableB" lui-même une vue calculée:

CREATE VIEW TableB AS SELECT ID, SUM(SomeInt) AS OtherInt FROM TableA; 

SELECT * FROM TableB; 
id | otherint 
----+---------- 
    2 |  77 
    1 |  121 
(2 rows) 
Questions connexes