2009-08-17 22 views
1

Ich habe die folgenden Tabellen:Referenz aktuelle Zeile

TableA 

ID | SomeInt 
1  55 
1  66 
2  77 

TableB 

ID | OtherInt 
1 ComputedBy Field 
2 ComputedBy Field 

Das durch Feld berechnet muss die Summe von tableA zurückzukehren, wo TableB.ID = TableA.ID, aber wenn ich sage:

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

wo die erste ID wäre die ID der aktuellen Tabelle, die dbms sagt "Mehrdeutige Feldname zwischen Tabelle Table1 und Table2"

Also, wie bekomme ich die ID aus der aktuellen Zeile, so dass es nicht den Feldnamen mischen.

So etwas wie This.ID, Self.ID, CurrentRow.ID oder was auch immer sql

EDIT verwendet: Offenbar kann ich Aktuelle Tabelle Namen verwenden, um die Spalte

Antwort

3

Einfache Antwort

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

Dies ist ein vollständig ausgearbeitetes Beispiel für Ihre Problem Entschuldigung tsql Syntax.

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 für A, B-Join-Syntax –

+0

@ Joel: Ich nicht, aber lachen helfen könnte. Obwohl ich nicht untergeordnet bin, warum sollte ich -1 bekommen? Ist diese Syntax nicht über DBs hinweg kompatibel? – shahkalpesh

0

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

0

Versuchst du TableB haben die Summe von TableA Werte zu machen? Sind die IDs bereits vorhanden (müssen nur aktualisiert werden) oder müssen Sie TableB von Grund auf neu auffüllen? Ich verstehe nicht, was Ihr Gesamtziel ist, und das würde die Antwort beeinflussen.

E.G.

  • aktualisieren w/Gruppe von
  • Insert
  • Trigger, TableB aktualisiert basierend auf Änderungen tableA
  • Einfach wählen ...

Lassen Sie mich wissen, was Ihr Ziel ist und Wir können eine ideale Antwort bekommen.

0

Sie könnten einfach "TableB" selbst eine berechnete Ansicht machen:

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

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