我有3张表<br>Tbcodetable<br>
codevalue | codename | desc1 | desc2
1 | SATO | NAG | Naga
2 | SATO | BAG | Baguio
3 | SATO | NCR | Head Office
Tbmember
employeeno | capcon_accountno | savings_accountno | sato
1 | 00101 | 00201 | NCR
2 | 00102 | 00202 | BAG
TB存款< br >
employeeno | account_no | accountbalance
1 | 00101 | 1000
1 | 00201 | 5000
2 | 00102 | 1000
2 | 00202 | 5000
我想在一个查询中查询每个sato的资本和储蓄的总和
codename | codevalue | desc1 | desc2 | capcon | savings
SATO |3 |Head Office |NCR |1000 | 5000
SATO |2 |Baguio |BAG |1000 | 5000
SATO |1 |Naga |NAG |0 | 0
我能做的最好的查询是
SELECT codename,codevalue,desc1,desc2,sum(b.accountbalance) as capcon
FROM TBCODETABLE c
left join TBMEMBER a on c.desc2 = a.SatoCode
html" target="_blank">join tbdeposit b on a.employeeno = b.employeeno
where a.SLAStatus = 'A' and c.codename ='sato'
group by codename, codevalue, desc1, desc2
这给了我这个结果。
codename | codevalue | desc1 | desc2 | capcon
SATO |1 |Head Office |NCR |1000
SATO |2 |Baguio |BAG |1000
这只给了我资本的总和(我迷失了如何包括储蓄和资本的结果),它不包括那牙地区
。
我可以通过employeeno连接tbmember和tbdeposit,但是我不知道如何在结果集中分离资本和储蓄的总和
编辑< br >我编辑了查询,现在多亏了syed,我可以查询两者,但我仍然无法获得NAG sato代码。查询:< br >
SELECT codename,codevalue,desc1,desc2, coalesce(sum(b.accountbalance),0) as savings, coalesce(sum(bb.accountbalance),0) as capcon FROM TBCODETABLE c left join TBMEMBER a on c.desc2 = a.SatoCode join tbdeposit b on a.SAVINGS_AccountNo = b.AccountNo
inner join tbdeposit bb on a.CAPCON_Accountno = bb.AccountNo where a.SLAStatus = 'A'
group by codename, codevalue, desc1, desc2
我能够得到预期的结果,谢谢你们克里斯的左加入建议解决了我的NAG SATO问题,尽管赛义德的回复帮助我花了很多时间。
我不知道如何投赞成票,所以我只会投克里斯(第一次在这里)
我的最后一个问题是:
SELECT codename,codevalue,desc1,desc2, coalesce(sum(b.accountbalance),0) as savings, coalesce(sum(bb.accountbalance),0) as capcon FROM TBCODETABLE c left join TBMEMBER a on c.desc2 = a.SatoCode left join tbdeposit b on a.SAVINGS_AccountNo = b.AccountNo
left join tbdeposit bb on a.CAPCON_Accountno = bb.AccountNo where a.SLAStatus = 'A' or codename = 'sato'
group by codename, codevalue, desc1, desc2
试试这个
select codename,codevalue,desc1,desc2,coalesce(sum(accountbalance),0) as capcon,
coalesce(deposite,0) as saving
from tbcodetable tc
left join tbmember tb
on tc.codevalue = tb.employeeno
left join(select max(employeeno) as employee,max(accountbalance) as deposite,accountbalance,employeeno from tbdeposite tp group by employeeno)l
on tb.employeeno = l.employeeno group by codevalue;
演示
我认为您需要在子查询中按< code>employeeno和< code>account_no进行分组。然后将capcon和savings拆分到单独的列中,并使用< code>case when:
select codename,
codevalue,
desc1,
desc2,
sum( case when a.savings_accountno = b.account_no then accountbalance else 0 end ) as savings,
sum( case when a.capcon_accountno = b.account_no then accountbalance else 0 end ) as capcon
from tbcodetable as c
left join
tbmember as a
on c.desc1 = a.sato
left join
(
select employeeno,
account_no,
sum( accountbalance ) as accountbalance
from tbdeposit
group by employeeno,
account_no
) as b
on a.employeeno = b.employeeno
group by codename,
codevalue,
desc1,
desc2
在这里查看SQLfiddle
首先,当你在表格中加入一些东西时,你左边的JOINING
ed你需要让它也成为一个左连接
,否则你最终会得到一个内部连接等价物。这不是你唯一的问题。
其次,对于值比较,大小写很重要,所以如果你的表样本是正确的,你应该有c.codename='SATO'
。
第三,您可能在那个时候,想要在 SUM 中添加一个 case 语句,
以便:
SUM(case
when account_no = capcon_account_no
THEN accountbalance ELSE NULL END)
你也可以为你的储蓄做类似的事情。
问题内容: 考虑Oracle表。我想用顶薪与获得职工和。还假定没有“ empno”列,并且主键涉及许多列。您可以使用以下方法执行此操作: 这可行,但我必须重复测试deptno = 20和job =’CLERK’,这是我想避免的。有没有更优雅的方式编写此代码,也许使用?顺便说一句,如果这很重要,我正在使用Oracle。 问题答案: 以下内容经过了精心设计,但对于“ top x”查询而言,这是一个很好
问题内容: 我有两个带有以下字段的表 我需要编写一个查询,其中提供了雇员的详细信息,雇员获得加薪的次数,最大加薪金额的值以及该加薪的日期。这是我到目前为止所拥有的: 除了授予最高增加额的日期外,这正确地给出了所有要求。我尝试了以下方法,但均未成功: 这给出了错误“组功能的无效使用”。有人知道我在做什么错吗? 问题答案: 您不能在where子句中执行此操作,无论是在联接条件下使用还是在联接条件下执行
问题内容: 我有两张桌子。表A列出了员工姓名。表B是一个复杂的表,其中包含有关员工打来的电话的信息。 我的目标是制作一个包含“名称”和“ callCount”列的表。我的目标是“左加入”和“分组依据”,但是我一直想念没有打过电话的员工。我怎样才能只保留名称并在其中放置零? 也许我很亲密,有人可以指出我的错字吗?在此先感谢您的帮助,以下是SQL: 问题答案: 这是一个JOIN而非NULL问题:您的过
我正在使用DatabaseClient执行sql查询,我不知道如何通过以下方式进行分组:
问题内容: 我正在尝试创建一个更新查询,并且在获取正确的语法方面进展甚微。以下查询正在运行: 它创建一个三元组的列表Index1,Index2,EventCounts。仅在t.SpecialEventCount为NULL的情况下才这样做。我尝试编写的更新查询应将此SpecialEventCount设置为该计数,即上述查询中的COUNT(m.EventType)。此数字可以是0或任何正数(因此为左联
我有一张清单,傻瓜 我想按类别分组,然后合计金额和价格。 现在我只需要用一个保存汇总的金额和价格的Foo对象替换String键。这就是我被困住的地方。我好像找不到办法。