1

这是一个一般的 SQL 问题,但我使用 Firebird。

我有这张表(简化):

id 金额类型 idtype
--------------------
1 10 合 1 0
2 15 英寸2 0
3 5 出1 1
4 4 出2 1
5 5 出 3 2

idtype 列“显示”传入部分的 id 并添加:我不能在我的询问表单中使用“类型”列,因为每次类型都不同。传入的 idtype 为“0”,这意味着“传入部分”

所以,我想要结果:

身份证进出  
--------------------
1 10 9    
2 15 5

我试过这样:

选择
  ID,
  数量,
   (
    选择
      SUM(金额)作为一起
    从
      我的表
    在哪里
      身份类型 0
    通过...分组
      ID
   ) 作为“出”
从
  我的表
在哪里
  身份类型 = 0

但这不起作用。有什么建议么?

4

1 回答 1

1

您正在使用该id字段而不是idtype在条件中,并且您没有匹配要汇总到任何内容的记录。

select
  id,
  amount,
   (
    select
      SUM (amount) as together
    from
      mytable
    where
      idtype = t.id
   ) as "out"
from
  mytable t
where
  idtype = 0

你也可以把它写成一个连接:

select
  id,
  amount,
  sum(t2.amount) as "out"
from
  mytable t
  innerjoin mytable t2 on t2.idtype = t.id
group by
  t.id, t.amount
where
  idtype = 0
于 2012-10-06T13:59:41.117 回答