v_flkc这个视图的定义是什么样子 的?

解决方案 »

  1.   

    --你可以把他分成两个子查询或者干脆两个句子,因为你这样关联还要对两个表分组查询怎---么可能?
    select * from
    (select b.柜组,a.sum(round(a.定价*a.册数*a.折让/100.00,2)) as 销售实价,sum(a.定价*a.册数)as 销售价 from lxs as a,v_flkc as b  where a.部门号=b.部门号 and a.ts_id=b.ts_idand a.部门号='001' group by b.柜组) a,
    (select b.柜组 as 大类,sum(b.现库存)as 现库存册数,sum(b.现库存*b.定价)as 现库存码洋 from v_flkc as b where  日期 between '2004-06-1' and '2004-06-16' and b.部门号='001' group by b.柜组) b where a.柜组=b.柜组;
    ---因为从你的表结构看,a表中尚缺少柜组字段如果你的ts_id是可以按柜组分类的话尚可以
      

  2.   

    恳请各位高手给于指点。/
    表1 lxs
    ts_id  册数 定价    折让(指销售折让) 部门号  日期
    00001   12   12.00   100                 002    2003-01-01
    00001    1   12.00    100                 001    2003-01-02
    00002    1    5.00    100                 001   2003-01-01视图1 flkcts_id   部门号 现库存 柜组
    00001    001     32    文体
    00002    001     22    文体
    00001    002     3     体育我想按部门查出每个部门的柜组的销售和现有库存,可是查出的库存总是不对
    请高手指教select b.柜组 as 大类,sum(册数)as 销售册数,sum(round(a.定价*a.册数*a.折让/100.00,2)) as 销售实价,sum(a.定价*a.册数)as 销售价 ,sum(b.现库存)as 现库存册数,sum(b.现库存*b.定价)as 现库存码洋 from lxs as a,v_flkc as b 
    where a.ts_id=b.ts_id  and 日期 between '2004-06-1' and '2004-06-16' and a.部门号='001'and b.部门号='001' group by b.柜组
      

  3.   

    用你上面的数据,测试 日期 between '2003-01-1' and '2004-06-16'  的结果:大类       销售册数     销售实价     销售价        现库存册数  现库存码洋 
    ---------- ----------- ------------ ----------- ------------ ----------
    文体       2           17.000000    17.00        54          494.00(所影响的行数为 1 行)
    这个结果有什么不对? 如果楼主是说: 现库存册 应该是52的话,那应该修改查询语句中的:
    ,sum(b.现库存)as 现库存册数改为:
    ,sum(b.现库存)-sum(册数) as 现库存册数
      

  4.   

    在你的Sql语句中你使用b.定价 但v_flkc as b 没有定价。    你能不能把你的结果也给出来,大家比较一下,看看有什么不同。
      

  5.   

    zjcxc(邹建) 说的对,应该是你要的结果
      

  6.   

    还是有问题,我把所有的都贴出来,大家帮忙看看,谢谢
    表LXS_DATA
    TS_ID  定价   册数   折让     日期      部门号  
    001   10.00    1    100.00   2004-07-04    001      
    001   10.00    2    100.00   2004-07-04    001      
    002   20.00    1    100.00   2004-07-04    001   
    视图v_flkc
    部门号  现库存  TS_ID   名称     柜组   定价           
    001      10      001    图书     图书   10.00
    001      20      002    音乐     音乐   20.00
    SQL 语句如下
    select b.柜组 as 大类,sum(册数)as 销售册数,sum(round(a.定价*a.册数*a.折让/100.00,2)) as 销售实洋,
    sum(a.定价*a.册数)as 销售码洋 ,sum(b.现库存)as 现库存册数,sum(b.现库存*b.定价)as 现库存码洋 
    from lxs_data as a,v_flkc as b where a.ts_id=b.ts_id  and 日期 between '2004-07-4' and '2004-07-04' 
    and a.部门号='001'and b.部门号='001' group by b.柜组输出结果为(库存有问题!!!!!!!)大类    销售册数   销售实洋     销售码洋  现库存册数    现库存码洋
    图书     3         30.000        30.00        20          200.00
    音乐     1         20.000        20.00        20          400.00(所影响的行数为 2 行)注:v_flkc里的库存是已经减去销售后的库存
      

  7.   

    select b.柜组 as 大类
    ,sum(册数)as 销售册数
    ,sum(round(a.定价*a.册数*a.折让/100.00,2)) as 销售实洋
    ,sum(a.定价*a.册数)as 销售码洋
    ,sum(distinct b.现库存)as 现库存册数
    ,sum(distinct b.现库存*b.定价)as 现库存码洋 
    --或者
    -- ,max(b.现库存)as 现库存册数
    -- ,max(b.现库存*b.定价)as 现库存码洋 
    from lxs_data as a,v_flkc as b 
    where a.ts_id=b.ts_id  
    and 日期 between '2004-07-4' and '2004-07-04' 
    and a.部门号='001'and b.部门号='001'
    group by b.柜组
      

  8.   

    --因为b与a是一对多的关系,而b是不需要再汇总的(已经是汇总数),故上述两种任选一种.
      

  9.   

    --测试--测试数据
    create table LXS_DATA(TS_ID varchar(10),定价 decimal(5,2),册数 int,折让 decimal(5,2),日期 datetime,部门号 varchar(10))
    insert LXS_DATA select '001',10.00,1,100.00,'2004-07-04','001'
    union  all      select '001',10.00,2,100.00,'2004-07-04','001'
    union  all      select '002',20.00,1,100.00,'2004-07-04','001'create table v_flkc(部门号 varchar(10),现库存 int,TS_ID varchar(10),名称 varchar(10),柜组 varchar(10),定价 decimal(5,2))
    insert v_flkc select '001',10,'001','图书','图书',10.00
    union  all    select '001',20,'002','音乐','音乐',20.00
    goselect b.柜组 as 大类
    ,sum(册数)as 销售册数
    ,sum(round(a.定价*a.册数*a.折让/100.00,2)) as 销售实洋
    ,sum(a.定价*a.册数)as 销售码洋
    ,sum(distinct b.现库存)as 现库存册数
    ,sum(distinct b.现库存*b.定价)as 现库存码洋 
    --或者
    -- ,max(b.现库存)as 现库存册数
    -- ,max(b.现库存*b.定价)as 现库存码洋 
    from lxs_data as a,v_flkc as b 
    where a.ts_id=b.ts_id  
    and 日期 between '2004-07-4' and '2004-07-04' 
    and a.部门号='001'and b.部门号='001'
    group by b.柜组
    go--删除测试
    drop table LXS_DATA,v_flkc/*--测试结果大类     销售册数   销售实洋          销售码洋     现库存册数  现库存码洋   
    ------- ----------- ----------------- ----------- ---------- -------------
    图书     3         30.0000000000     30.00        10         100.00
    音乐     1         20.0000000000     20.00        20         400.00(所影响的行数为 2 行)
    --*/
      

  10.   

    zjcxc(邹建) 谢谢您给我的解答,
    可是还有个问题,可能是我没有表达清楚。我想统计的是所有的商品的库存,可是按照上述方法只能统计出有销售的商品库存。
    例如把视图v_flkc 多加一条没有销售过的记录
    部门号  现库存  TS_ID   名称     柜组   定价           
    001      10      001    图书     图书   10.00
    001      20      002    音乐     音乐   20.00
    001      20      003     图书     图书  10.00统计出的结果仍然不对!