我有像贝娄一样的表
tbl=province
id_province | province
----------------------
01 Province1
02 Province2
03 Province3
...
...
tbl=grade
id_grade | grade
-----------------
A elementary
B junior
C senior
tbl.transaction
-----------------------------
code | id_province | id_grade
--------------------------------
t1 01 A
t2 01 A
t3 01 A
t4 02 A
t5 03 C
t6 02 B
t7 03 A
我如何查询是否要显示像bellow
这样的数据id_province | province | count of grade A | count of grade B | count of grade C
---------------------------------------------------------------------------------------------
01 Province1 3 0 0
02 Province2 1 1 0
03 Province3 1 0 1
我尝试使用像bellow这样的子查询进行查询,但它不起作用:
select id_province,(select count(*) from transaction where id_grade='A') as count of grade A,(select count(*) from transaction where id_grade='B') as count of grade B,
(select count(*) from transaction where id_grade='C') as count of grade C group by id_province
此外,上面的查询显示数据如下:(
id_province | province | count of grade A | count of grade B | count of grade C
---------------------------------------------------------------------------------------------
01 Province1 3 0 0
02 Province2 3 0 0
03 Province3 3 0 0
知道如何解决这个问题吗?
答案 0 :(得分:0)
如果您查询"省"我认为您不需要分组。表。 尝试这样的事情:
select p.id_province, p.province,
(select count(*) from transaction t1 where t1.id_grade='A' AND t1.id_province = p.id_province) as 'count of grade A',
(select count(*) from transaction t2 where t2.id_grade='B' AND t2.id_province = p.id_province) as 'count of grade B',
(select count(*) from transaction t3 where t3.id_grade='C' AND t3.id_province = p.id_province) as 'count of grade C'
FROM province p
(sql未经过测试......可能有一些错别字)
答案 1 :(得分:0)
我在SQL Server中这样做了。请注意,transaction
是保留字。
select t.id_province,p.province,
(select count(*) from [transaction] where id_grade='A' and id_province = t.id_province) as 'count of grade A',
(select count(*) from [transaction] where id_grade='B' and id_province = t.id_province) as 'count of grade B',
(select count(*) from [transaction] where id_grade='C' and id_province = t.id_province) as 'count of grade C'
from [transaction] t
inner join province p on
p.id_province = t.id_province
group by t.id_province, p.province
答案 2 :(得分:0)
您可以使用case
。
select
p.id_province,
p.province,
count(case when t.id_grade = 'A' then 1 else null end) as 'count of grade A',
count(case when t.id_grade = 'B' then 1 else null end) as 'count of grade B',
count(case when t.id_grade = 'C' then 1 else null end) as 'count of grade C'
from
province p,
transation t
where
p.id_province = t.id_province
group by p.id_province