sql语句不像我想要的那样工作

时间:2013-07-29 11:41:08

标签: sql join

我需要从tabBuchung中获取所有“dblSoll”值的总和以及来自tabBuchungx的所有“dblSoll”值的总和......

这是我的定义:

CREATE TABLE tabBuchung
(strKto char(50), 
 dblSoll int(50),
 dblHaben int(50));

CREATE TABLE tabKonten
(strKtoNr char(50),
strKtoBez char(50),
strKtoTyp char(50));

CREATE TABLE tabBuchungx
(strKto char(50),
dblSoll int(50),
dblHaben int(50));

insert into tabBuchung values ("1500", 50,0);
insert into tabBuchung values ("1600", 70,0);
insert into tabBuchung values ("1600", 130,0);
insert into tabBuchung values ("1700", 0, 800);
insert into tabBuchung values ("1800", 30, 22);
insert into tabBuchung values ("2000", 100, 0);
insert into tabBuchung values ("2000", 140, 0);

insert into tabBuchungx values ("1500", 0, 80);
insert into tabBuchungx values ("1600", 220, 0);
insert into tabBuchungx values ("1600", 80, 0);
insert into tabBuchungx values ("1700", 0, 44);
insert into tabBuchungx values ("1800", 10, 15);
insert into tabBuchungx values ("1900", 30, 0);
insert into tabBuchungx values ("1900", 10, 0);

这是我的发言atm:

select tabBuchung.strKto, sum(tabBuchung.dblSoll) as newSaldo, sum(tabBuchungx.dblSoll) as oldSaldo
from tabBuchung
join tabBuchungx on tabBuchung.strKto = tabBuchungx.strKto
where tabBuchung.strKto = '1600'
group by tabBuchung.strKto, tabBuchung.dblSoll, tabBuchungx.dblSoll

这就是我得到的东西:

strkto newsaldo oldsaldo
1600     70         80
1600     70        220
1600    130         80
1600    130        220

但我想要一行:

strkto   newsaldo   oldsaldo
1600        200       300

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:1)

尝试这种方式:

select distinct
       t.strKto,
       (select sum(t1.dblSoll)
           from tabBuchung t1 
          where  t1.strKto = t.strKto) as oldsaldo,  
       (select sum(tx.dblSoll) 
         from tabBuchungx tx 
          where  tx.strKto = t.strKto) as newsaldo
from tabBuchung t    
where t.strKto = '1600'

答案 1 :(得分:0)

您无法加入表格。你必须使用不同的方法。您在两个表中都有2个匹配的strkto,它们将返回这些行的所有可能组合。在你的情况下4行。这就是你如何组合它们:

select strKto, sum(newSaldo) as newSaldo, sum(oldSaldo) as oldSaldo 
from 
(
select strKto, dblSoll as newSaldo, 0 as oldSaldo
from tabBuchung
where strKto = '1600'
union all
select strKto, 0 as newSaldo, dblSoll as oldSaldo
from tabBuchungx
where strKto = '1600'
) a
group by strKto