参考当前行

时间:2009-08-17 20:55:58

标签: sql join firebird

我有以下表格:

TableA

ID | SomeInt
1     55
1     66
2     77

TableB

ID | OtherInt
1    ComputedBy Field
2    ComputedBy Field

按字段计算需要从tableA返回总和,其中TableB.ID = TableA.ID,但如果我说:

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

其中第一个ID是当前表的ID,dbms表示“表Table1和Table2之间的不明确的字段名称”

那么,我如何从当前行获取ID,以便它不会混合字段名称。

像This.ID,Self.ID,CurrentRow.ID或sql使用的任何东西

编辑:显然我可以使用当前表的名称来引用列

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

SELECT B.ID, SUM(A.SomeInt) AS Total 
From TableA A, TableB B where A.ID = B.Id
GROUP BY B.ID

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您是否尝试使TableB具有TableA值的总和? ID已经存在(只需要更新),还是需要从头开始填充TableB?我不明白你的总体目标是什么,这会影响答案。

E.G。

  • 通过
  • 更新w / group
  • 插入
  • 触发更新TableB的基础 更改为tableA
  • 简单选择......

让我知道你的目标是什么,我们可以得到一个理想的答案。

答案 4 :(得分: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)