有三个表TA,TB,TCTA(大类)编号 名称
--------------
1002 家电
1003 办公
TB(小类)编号 名称 所属大类
-----------------------------
10001 制冷 1002
10002 餐具 1002
10003 台式机 1003
10004 笔记本 1003TC(产品表)编号 名称 所属小类
----------------------------------
1 海尔EN-133D 10001
2 美的EN-143A 10001
3 上档磁碗 10002
4 结页杯 10002
5 DELL E345 10003
6 ThinkPad R400 10004现在要一条语句统计出按每个大类下有多少个产品大类编号 产品数
--------------------------
1002 4
1003 2
请达人指点下,解决马上结贴
--------------
1002 家电
1003 办公
TB(小类)编号 名称 所属大类
-----------------------------
10001 制冷 1002
10002 餐具 1002
10003 台式机 1003
10004 笔记本 1003TC(产品表)编号 名称 所属小类
----------------------------------
1 海尔EN-133D 10001
2 美的EN-143A 10001
3 上档磁碗 10002
4 结页杯 10002
5 DELL E345 10003
6 ThinkPad R400 10004现在要一条语句统计出按每个大类下有多少个产品大类编号 产品数
--------------------------
1002 4
1003 2
请达人指点下,解决马上结贴
A.id,COUNT(*) AS 产品数
FROM tb1 AS A
JOIN tb2 AS B
ON A.id=B.所属大类
JOIN tb3 AS C
ON B.id = C.所属小类
GROUP BY A.id
from TB b,TC c
where b.编号=c.所属小类
B.所属大类 AS 大类编号,
COUNT(C.编号)AS 产品数
FROM TB B,TC C
WHERE B.编号=C.所属小类
GROUP BY B.所属大类
from TB b,TC c
where b.编号=c.所属小类
group by b.所属大类modify
select b.所属大类 大类编号,count(1) as 产品数
from TB b,TC c
where b.编号=c.所属小类
group by b.所属大类
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-08-04 11:18:49
-------------------------------------
--> 生成测试数据: @tb1
DECLARE @tb1 TABLE (编号 INT,名称 VARCHAR(4))
INSERT INTO @tb1
SELECT 1002,'家电' UNION ALL
SELECT 1003,'办公'
--> 生成测试数据: @tb2
DECLARE @tb2 TABLE (编号 INT,名称 VARCHAR(6),所属大类 INT)
INSERT INTO @tb2
SELECT 10001,'制冷',1002 UNION ALL
SELECT 10002,'餐具',1002 UNION ALL
SELECT 10003,'台式机',1003 UNION ALL
SELECT 10004,'笔记本',1003
--> 生成测试数据: @tb3
DECLARE @tb3 TABLE (编号 INT,名称 VARCHAR(12),所属小类 INT)
INSERT INTO @tb3
SELECT 1,'海尔EN-133D',10001 UNION ALL
SELECT 2,'美的EN-143A',10001 UNION ALL
SELECT 3,'上档磁碗',10002 UNION ALL
SELECT 4,'结页杯',10002 UNION ALL
SELECT 5,'DELLE345',10003 UNION ALL
SELECT 6,'ThinkPadR400',10004--SQL查询如下:SELECT
A.编号,A.名称,COUNT(*) AS 产品数
FROM @tb1 AS A
JOIN @tb2 AS B
ON A.编号=B.所属大类
JOIN @tb3 AS C
ON B.编号 = C.所属小类
GROUP BY A.编号,A.名称
/*
编号 名称 产品数
----------- ---- -----------
1002 家电 4
1003 办公 2(2 行受影响)
*/
select 编号,count(*)as 产品数 from(
select 编号,所属大类 from tb b,tc c
where b.编号=c.所属小类) t
group by 编号
from ta,tc
where ta.编号=tb.所属大类 and tc.所属小类=tb.编号
group by ta.编号
DECLARE @tb2 TABLE (编号 INT,名称 VARCHAR(6),所属大类 INT)
INSERT INTO @tb2
SELECT 10001,'制冷',1002 UNION ALL
SELECT 10002,'餐具',1002 UNION ALL
SELECT 10003,'台式机',1003 UNION ALL
SELECT 10004,'笔记本',1003
--> 生成测试数据: @tb3
DECLARE @tb3 TABLE (编号 INT,名称 VARCHAR(12),所属小类 INT)
INSERT INTO @tb3
SELECT 1,'海尔EN-133D',10001 UNION ALL
SELECT 2,'美的EN-143A',10001 UNION ALL
SELECT 3,'上档磁碗',10002 UNION ALL
SELECT 4,'结页杯',10002 UNION ALL
SELECT 5,'DELLE345',10003 UNION ALL
SELECT 6,'ThinkPadR400',10004SELECT
B.所属大类 AS 大类编号,
COUNT(C.编号)AS 产品数
FROM @tb2 B,@tb3 C
WHERE B.编号=C.所属小类
GROUP BY B.所属大类
(所影响的行数为 4 行)
(所影响的行数为 6 行)大类编号 产品数
----------- -----------
1002 4
1003 2(所影响的行数为 2 行)
-- 借梁哥数据
DECLARE @tb2 TABLE (编号 INT,名称 VARCHAR(6),所属大类 INT)
INSERT INTO @tb2
SELECT 10001,'制冷',1002 UNION ALL
SELECT 10002,'餐具',1002 UNION ALL
SELECT 10003,'台式机',1003 UNION ALL
SELECT 10004,'笔记本',1003
--> 生成测试数据: @tb3
DECLARE @tb3 TABLE (编号 INT,名称 VARCHAR(12),所属小类 INT)
INSERT INTO @tb3
SELECT 1,'海尔EN-133D',10001 UNION ALL
SELECT 2,'美的EN-143A',10001 UNION ALL
SELECT 3,'上档磁碗',10002 UNION ALL
SELECT 4,'结页杯',10002 UNION ALL
SELECT 5,'DELLE345',10003 UNION ALL
SELECT 6,'ThinkPadR400',10004select 所属大类,count(*)as 产品数 from(
select b.编号,所属大类 from @tb2 b,@tb3 c
where b.编号=c.所属小类) t
group by 所属大类
所属大类 产品数
----------- -----------
1002 4
1003 2(2 行受影响)
--> 生成测试数据表:tbIf not object_id('[tb]') is null
Drop table [tb]
Go
Create table [tb]([编号] int,[名称] nvarchar(3),[所属大类] int)
Insert tb
Select 10001,'制冷',1002 union all
Select 10002,'餐具',1002 union all
Select 10003,'台式机',1003 union all
Select 10004,'笔记本',1003
Go
--Select * from tb
--> 生成测试数据表:tcIf not object_id('[tc]') is null
Drop table [tc]
Go
Create table [tc]([编号] int,[名称] nvarchar(13),[所属小类] int)
Insert tc
Select 1,'海尔EN-133D',10001 union all
Select 2,'美的EN-143A',10001 union all
Select 3,'上档磁碗',10002 union all
Select 4,'结页杯',10002 union all
Select 5,'DELL-E345',10003 union all
Select 6,'ThinkPad-R400',10004
Go
--Select * from tc-->SQL查询如下:select b.所属大类 大类编号,count(1) as 产品数
from TB b,TC c
where b.编号=c.所属小类
group by b.所属大类/*
大类编号 产品数
----------- -----------
1002 4
1003 2(2 行受影响)
*/
select a.名称 大类名称,count(*) as 产品数
from TA a,Tb b,TC c
where b.编号=c.所属小类 and a.编号=c.所属大类
group by a.名称
create table 大类 (编号 INT,名称 VARCHAR(4))
INSERT INTO 大类
SELECT 1002,'家电' UNION ALL
SELECT 1003,'办公'
if OBJECT_ID('小类') is not null drop table [小类]
create TABLE [小类] (编号 INT,名称 VARCHAR(6),所属大类 INT)
INSERT INTO [小类]
SELECT 10001,'制冷',1002 UNION ALL
SELECT 10002,'餐具',1002 UNION ALL
SELECT 10003,'台式机',1003 UNION ALL
SELECT 10004,'笔记本',1003
if OBJECT_ID('产品') is not null drop table [产品]
create table 产品 (编号 INT,名称 VARCHAR(12),所属小类 INT)
INSERT INTO 产品
SELECT 1,'海尔EN-133D',10001 UNION ALL
SELECT 2,'美的EN-143A',10001 UNION ALL
SELECT 3,'上档磁碗',10002 UNION ALL
SELECT 4,'结页杯',10002 UNION ALL
SELECT 5,'DELLE345',10003 UNION ALL
SELECT 6,'ThinkPadR400',10004
select a.编号,a.名称,COUNT(1) as 数量
from 大类 a,小类 b,产品 c
where a.编号=b.所属大类 and b.编号=c.所属小类
group by a.编号,a.名称
/*
编号 名称 数量
1002 家电 4
1003 办公 2
*/
select b.所属大类 大类编号,count(1) as 产品数
from TB b,TC c
where b.编号=c.所属小类
group by b.所属大类
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-08-12 11:34:03
----------------------------------------------------------------
--> 测试数据:[TA]
if object_id('[TA]') is not null drop table [TA]
go
create table [TA]([编号] int,[名称] varchar(4))
insert [TA]
select 1002,'家电' union all
select 1003,'办公'
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([编号] int,[名称] varchar(6),[所属大类] int)
insert [TB]
select 10001,'制冷',1002 union all
select 10002,'餐具',1002 union all
select 10003,'台式机',1003 union all
select 10004,'笔记本',1003
--> 测试数据:[TC]
if object_id('[TC]') is not null drop table [TC]
go
create table [TC]([编号] int,[名称] varchar(12),[所属小类] int)
insert [TC]
select 1,'海尔EN-133D',10001 union all
select 2,'美的EN-143A',10001 union all
select 3,'上档磁碗',10002 union all
select 4,'结页杯',10002 union all
select 5,'DELLE345',10003 union all
select 6,'ThinkPadR400',10004
--------------开始查询--------------------------
select
b.所属大类 大类编号,
count(1) as 产品数
from
TB b,TC c
where
b.编号=c.所属小类
group by
b.所属大类----------------结果----------------------------
/*大类编号 产品数
----------- -----------
1002 4
1003 2(所影响的行数为 2 行)*/