A表:ID 名称 价格
1 aa 3
2 bb 5
3 cc 7
4 ee 6
B表:
ID 名称 价格
3 cc 7
2 bb 5
1 aa 3
4 ee 6
1 aa 3
2 bb 5
3 cc 7
3 cc 7目的:从A表取出所有的记录,并从B表统计出和A表记录相同的记录次数统计,查询显示成新的数据,如:
ID 名称 价格 统计
1 aa 3 2
2 bb 5 2
3 cc 7 3
4 ee 6 1这个SQL怎么写?
1 aa 3
2 bb 5
3 cc 7
4 ee 6
B表:
ID 名称 价格
3 cc 7
2 bb 5
1 aa 3
4 ee 6
1 aa 3
2 bb 5
3 cc 7
3 cc 7目的:从A表取出所有的记录,并从B表统计出和A表记录相同的记录次数统计,查询显示成新的数据,如:
ID 名称 价格 统计
1 aa 3 2
2 bb 5 2
3 cc 7 3
4 ee 6 1这个SQL怎么写?
from
(select * from ta
union all
select * from tb) a
group by ID ,名称 ,价格
from b group by id,名称,价格
b.统计
from ta a left join
(select ID,
名称,
count(*)统计
from tb group by ID,名称)b
on a.ID=b.ID and a.名称=b.名称
drop table ta
Go
Create table ta([ID] int,[名称] nvarchar(2),[价格] int)
Insert ta
select 1,N'aa',3 union all
select 2,N'bb',5 union all
select 3,N'cc',7 union all
select 4,N'ee',6
Go
if not object_id('tb') is null
drop table tb
Go
Create table tb([ID] int,[名称] nvarchar(2),[价格] int)
Insert tb
select 3,N'cc',7 union all
select 2,N'bb',5 union all
select 1,N'aa',3 union all
select 4,N'ee',6 union all
select 1,N'aa',3 union all
select 2,N'bb',5 union all
select 3,N'cc',7 union all
select 3,N'cc',7
Go
select a.*,
b.统计
from ta a left join
(select ID,
名称,
count(*)统计
from tb group by ID,名称)b
on a.ID=b.ID and a.名称=b.名称
/*
ID 名称 价格 统计
----------- ---- ----------- -----------
1 aa 3 2
2 bb 5 2
3 cc 7 3
4 ee 6 1(4 個資料列受到影響)
*/
count(b.ID)统计
from ta a left join tb b
on a.ID=b.ID and a.名称=b.名称
group by a.ID,a.[价格],a.名称
select a.*,b.统计from ta a
left join
(select ID, 名称, count(*)统计 from tb group by ID,名称) b
on a.ID=b.ID and a.名称=b.名称
from a left join b
on a.id=b.id and a.名称=b.名称 and a.价格=b.价格
group by a.ID,a.价格,a.名称
/*
ID 名称 价格 统计
----------- ---- ----------- -----------
1 aa 3 2
2 bb 5 2
3 cc 7 3
4 ee 6 1
*/
这种方法统计的有少了,假设A表中有一条记录,在B表中是没有的,那么统计不到A这条记录。
1 aa 3
2 bb 5
3 cc 7
4 ee 6
5 dd 8而B表没有第5条记录dd这个,那么,想统计出是类似这样的,ID 名称 价格 统计
1 aa 3 2
2 bb 5 2
3 cc 7 3
4 ee 6 1
5 dd 8 0
drop table ta
Go
Create table ta([ID] int,[名称] nvarchar(2),[价格] int)
Insert ta
select 1,N'aa',3 union all
select 2,N'bb',5 union all
select 3,N'cc',7 union all
select 4,N'ee',6 union all
select 5,N'ff',9
Go
if not object_id('tb') is null
drop table tb
Go
Create table tb([ID] int,[名称] nvarchar(2),[价格] int)
Insert tb
select 3,N'cc',7 union all
select 2,N'bb',5 union all
select 1,N'aa',3 union all
select 4,N'ee',6 union all
select 1,N'aa',3 union all
select 2,N'bb',5 union all
select 3,N'cc',7 union all
select 3,N'cc',7
Go
select a.id,a.名称,a.价格,count(b.id) as 统计
from ta a left join tb b on a.id=b.id
group by a.id,a.名称,a.价格
id 名称 价格 统计
----------- ---- ----------- -----------
1 aa 3 2
2 bb 5 2
3 cc 7 3
4 ee 6 1
5 ff 9 0(所影响的行数为 5 行)