2009-08-17 65 views
1

我有以下表格:參考當前行

TableA 

ID | SomeInt 
1  55 
1  66 
2  77 

TableB 

ID | OtherInt 
1 ComputedBy Field 
2 ComputedBy Field 

的通過現場計算需要從表A返回的總和,其中TableB.ID = TableA.ID,但如果我說:

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

其中第一個ID是當前表的ID,dbms表示「Table Table1和Table2之間的模糊字段名稱」

那麼,如何從當前行獲取ID,以便它不混合字段名稱。

喜歡的東西This.ID,Self.ID,CurrentRow.ID或任何SQL使用

編輯:顯然,我可以使用當前表的名稱來引用列

回答

3

答案很簡單

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

這是一個完整的問題解釋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連接語法 – 2009-08-17 21:00:50

+0

@Joel:我忍不住笑了起來。雖然我不是低估,爲什麼你認爲我應該得到-1?該語法在數據庫中不兼容? – shahkalpesh 2009-08-17 21:52:47

0

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

0

你試圖使表B具有表A的值的總和?該ID是否已經存在(只需要更新)還是需要從頭開始填充TableB?我不明白你的總體目標是什麼,這會影響答案。

E.G.

  • 更新w,基於 變化表A
  • 簡單的選擇由
  • 插入
  • 觸發器,更新表B /組...

讓我知道你的目標是什麼,我們可以得到理想的答案。

0

你可能只是讓"TableB"本身就是一個計算的看法:

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

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