SQL查询来概括同一ID列的两个不同的值在一个查询
问题描述:
慈祥,有人可以帮我这个问题,我有如下表: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
所以,我想在一个行和一个查询请结果。
请提出任何建议。
在此先感谢。
答
你想要做的就是所谓的条件聚合。你可以使用
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
答
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的记录 –
非常感谢我的朋友,它的工作。
也许downvoter可以解释原因? –
,因为你的查询不会返回所需的输出 – LONG