有三个表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
请达人指点下,解决马上结贴

解决方案 »

  1.   

    SELECT
        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
      

  2.   

    select b.所属大类 大类编号,count(1) as 产品数
    from TB b,TC c
    where b.编号=c.所属小类 
      

  3.   

    SELECT 
    B.所属大类 AS 大类编号,
    COUNT(C.编号)AS 产品数 
    FROM TB B,TC C
     WHERE B.编号=C.所属小类
    GROUP BY B.所属大类
      

  4.   

    select b.所属大类 大类编号,count(1) as 产品数
    from TB b,TC c
    where b.编号=c.所属小类
    group by b.所属大类modify
      

  5.   


    select b.所属大类 大类编号,count(1) as 产品数
    from TB b,TC c
    where b.编号=c.所属小类
    group by b.所属大类
      

  6.   

    -------------------------------------
    --  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 行受影响)
    */
      

  7.   


    select 编号,count(*)as 产品数 from(
    select 编号,所属大类 from tb b,tc c
    where b.编号=c.所属小类) t
    group by 编号
     
      

  8.   

    select ta.编号,count(*)
    from ta,tc
    where ta.编号=tb.所属大类 and tc.所属小类=tb.编号
    group by ta.编号
      

  9.   

    借用梁哥数据测试一下--> 生成测试数据: @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',10004SELECT 
    B.所属大类 AS 大类编号,
    COUNT(C.编号)AS 产品数 
    FROM @tb2 B,@tb3 C
     WHERE B.编号=C.所属小类
    GROUP BY B.所属大类
    (所影响的行数为 4 行)
    (所影响的行数为 6 行)大类编号        产品数         
    ----------- ----------- 
    1002        4
    1003        2(所影响的行数为 2 行)
      

  10.   


    -- 借梁哥数据
    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 行受影响)
      

  11.   


    --> 生成测试数据表: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 行受影响)
    */
      

  12.   


    select a.名称 大类名称,count(*) as 产品数
    from TA a,Tb b,TC c
    where b.编号=c.所属小类 and a.编号=c.所属大类 
    group by a.名称
      

  13.   

    if OBJECT_ID('大类') is not null drop table [大类]
    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
    */
      

  14.   


    select b.所属大类 大类编号,count(1) as 产品数
    from TB b,TC c
    where b.编号=c.所属小类
    group by b.所属大类
      

  15.   

    ----------------------------------------------------------------
    -- 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 行)*/