2017-02-17 95 views
0

慈祥,有人可以帮我这个问题,我有如下表:SQL查询来概括同一ID列的两个不同的值在一个查询

表名:余额

cname  amount  type 
-------------------------------------- 
Jhon  150  A 
Jhon  200  B 
Jhon  100  A 
Jhon  30  A 
Jhon  55  B 

=== ===================================

我想要一个SQLquery给我这个结果:

cname  totalOf_A totalOf_B 
--------------------------------------- 
Jhon  280   255 
========================================= 

我试过了fo llwoing:

select ,cname,sum(amount),type from balances group by cname,type 

结果:

cname  amount type 
----  -----  ---- 
Jhon  250  A 
Jhon  255  B  

所以,我想在一个行和一个查询请结果。
请提出任何建议。
在此先感谢。

回答

1

你想要做的就是所谓的条件聚合。你可以使用

select 
cname, 
sum(case when type='A' then amount else 0 end) as total_A, 
sum(case when type='B' then amount else 0 end) as total_B 
from balances 
group by cname 
+0

非常感谢我的朋友,它的工作。 <3你做了我的一天。 –

+0

也许downvoter可以解释原因? –

+0

,因为你的查询不会返回所需的输出 – LONG

0
select A.cname,A.typeof_A,B.typeof_B 
    FROM 
    (
    select cname,sum(amount) as typeof_A 
    from balances 
    where type = 'A' 
    group by cname 
    ) as A 

    INNER JOIN 

    (
    select cname,sum(amount) as typeof_B 
    from balances 
    where type = 'B' 
    group by cname 
    ) as B 
    ON B.cname = A.cname 
+0

我已经尝试过ur代码,但是如果类型A或B的总和='0',那么这些行不会出现在结果中!它真的让我困惑,现在我很想找到答案,为什么发生这种情况! –

+0

好的,我发现为什么,并非所有的(cname)总是在记录中键入A或B,在某些情况下,“cname”只有A类型,或只有B类型,所以在这种情况下,当我使用ur查询和becase的“内部联接”它只显示我有类型A和B的记录 –