--你可以把他分成两个子查询或者干脆两个句子,因为你这样关联还要对两个表分组查询怎---么可能? 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是可以按柜组分类的话尚可以
恳请各位高手给于指点。/ 表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.柜组
在你的Sql语句中你使用b.定价 但v_flkc as b 没有定价。 你能不能把你的结果也给出来,大家比较一下,看看有什么不同。
zjcxc(邹建) 说的对,应该是你要的结果
还是有问题,我把所有的都贴出来,大家帮忙看看,谢谢 表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里的库存是已经减去销售后的库存
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.柜组
--因为b与a是一对多的关系,而b是不需要再汇总的(已经是汇总数),故上述两种任选一种.
--测试--测试数据 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 行) --*/
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是可以按柜组分类的话尚可以
表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.柜组
---------- ----------- ------------ ----------- ------------ ----------
文体 2 17.000000 17.00 54 494.00(所影响的行数为 1 行)
这个结果有什么不对? 如果楼主是说: 现库存册 应该是52的话,那应该修改查询语句中的:
,sum(b.现库存)as 现库存册数改为:
,sum(b.现库存)-sum(册数) as 现库存册数
表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里的库存是已经减去销售后的库存
,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.柜组
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 行)
--*/
可是还有个问题,可能是我没有表达清楚。我想统计的是所有的商品的库存,可是按照上述方法只能统计出有销售的商品库存。
例如把视图v_flkc 多加一条没有销售过的记录
部门号 现库存 TS_ID 名称 柜组 定价
001 10 001 图书 图书 10.00
001 20 002 音乐 音乐 20.00
001 20 003 图书 图书 10.00统计出的结果仍然不对!