现在我需要做一个一级类别的统计,涉及三张表,一张是订单表 Oder,一张是商品信息表 Item,最后一张是商品类型表 TypeType表里面的类别分了好多级,只有一个level字段来识别,现在统计变得非常麻烦。想用LIKE来做,发现不会....请大家帮帮我,在考虑性能的前提下,应该怎样写?我要统计level类的订单数量,类似于
订单数  物品类别
1258    硬件
1225    软件
8585    玩具
涉及的三张表如下:Order---订单表
OrderId  ItemId
1          8
2          9 Item----物品表
ItemId  ItemType
8         0223
9         033333Type----物品类型表
TypeNo  Level  TypeName
02      1      软件
022     2      应用软件
0223    3      everse
03      1      硬件
033333  5      内存

解决方案 »

  1.   

    上面有个地方写错了,我想统计Level = 1 也就是级别为1的订单数
      

  2.   


    select c.typename as 物品类别,count(OrderId) as 订单数
    from Order a,Item b,Type c
    where a.ItemId = b.ItemId and b.ItemType = c.TypeNo
    group by c.typename
      

  3.   


    select c.typename as 物品类别,count(OrderId) as 订单数
    from Order a,Item b,Type c
    where a.ItemId = b.ItemId and b.ItemType = c.TypeNo and c.Level = 1
    group by c.typename
      

  4.   

    对了,现在的条件不允许使用存储过程.........只能使用SQL
      

  5.   

    select c.typename as 物品类别,count(a.OrderId) as 订单数
    少打了个a.
      

  6.   


    你这个只统计了level 1 的个数,没有把它下级的个数也统计进去,我需要把属于它下级的个数也统计
      

  7.   

    比如定单里面有个商品的类别是应用软件,还有个类别是everse,那么lv 1 软件的订单就有两个,我是这个意思
      

  8.   

    /*
    标题:SQL SERVER 2000中查询指定节点及其所有子节点的函数(表格形式显示)
    作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开) 
    时间:2008-05-12
    地点:广东深圳
    */create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
    insert into tb values('001' , null  , '广东省')
    insert into tb values('002' , '001' , '广州市')
    insert into tb values('003' , '001' , '深圳市')
    insert into tb values('004' , '002' , '天河区')
    insert into tb values('005' , '003' , '罗湖区')
    insert into tb values('006' , '003' , '福田区')
    insert into tb values('007' , '003' , '宝安区')
    insert into tb values('008' , '007' , '西乡镇')
    insert into tb values('009' , '007' , '龙华镇')
    insert into tb values('010' , '007' , '松岗镇')
    go--查询指定节点及其所有子节点的函数
    create function f_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int)
    as
    begin
      declare @level int
      set @level = 1
      insert into @t_level select @id , @level
      while @@ROWCOUNT > 0
      begin
        set @level = @level + 1
        insert into @t_level select a.id , @level
        from tb a , @t_Level b
        where a.pid = b.id and b.level = @level - 1
      end
      return
    end
    go--调用函数查询001(广东省)及其所有子节点
    select a.* from tb a , f_cid('001') b where a.id = b.id order by a.id
    /*
    id   pid  name       
    ---- ---- ---------- 
    001  NULL 广东省
    002  001  广州市
    003  001  深圳市
    004  002  天河区
    005  003  罗湖区
    006  003  福田区
    007  003  宝安区
    008  007  西乡镇
    009  007  龙华镇
    010  007  松岗镇(所影响的行数为 10 行)
    */--调用函数查询002(广州市)及其所有子节点
    select a.* from tb a , f_cid('002') b where a.id = b.id order by a.id
    /*
    id   pid  name       
    ---- ---- ---------- 
    002  001  广州市
    004  002  天河区(所影响的行数为 2 行)
    */--调用函数查询003(深圳市)及其所有子节点
    select a.* from tb a , f_cid('003') b where a.id = b.id order by a.id
    /*
    id   pid  name       
    ---- ---- ---------- 
    003  001  深圳市
    005  003  罗湖区
    006  003  福田区
    007  003  宝安区
    008  007  西乡镇
    009  007  龙华镇
    010  007  松岗镇(所影响的行数为 7 行)
    */drop table tb
    drop function f_cid
      

  9.   


    我的类别表没有pid这个字段,只有Level........所以非常麻烦啊
      

  10.   


    create table t1
    (
    orderid int,
    itemid int
    )
    insert into t1 
    select 1, 8 union all
    select 2, 9 union all
    select 3,10
    create table t2
    (
    itemid int,
    itemtype varchar(10)
    )
    insert into t2 
    select 8, '0223' union all
    select 9, '033333' union all
    select 10,'022'
    create table t3
    (
    typeno varchar(10),
    lv int,
    typename varchar(50)
    )
    insert into t3
    select '02', 1, '软件' union all
    select '022', 2, '应用软件' union all
    select '0223', 3, 'everse' union all
    select '03', 1, '硬件' union all
    select '033333', 5, '内存'select d.amount,t3.typename from t3 inner join 
    (select count(a.orderid) as amount,left(b.itemtype,2) as typeno from t1 a inner join t2 b on a.itemid=b.itemid 
    inner join t3 c on b.itemtype=c.typeno group by left(b.itemtype,2)) d on t3.typeno=d.typeno