求一条SQL语句

cyxin2121921 2009-12-10 03:43:01
本人的数据表中的字段为:材料编码,材料名称,规格型号,计量单位,单价,金额,部门,分类,如下字段
但是在表中的数据中有些记录的材料编码字段是空的,而有些记录不空的
我想实现这样的功能,就是对记录进行汇总操作,
如果“材料编码”字段不为空的记录,就按照“材料编码”和“部门”进行汇总
如果“材料编码”字段为空的记录,就按照“材料名称”和“部门”进行汇总

我这个是9.0版本的,我初步用如下代码,但是有错误,就是在group by后面不能够存在类似nvl()这类函数。
SET ENGINEBEHAVIOR 70
select 材料编码,材料名称,规格型号,计量单位,sum(数量) as 数量,计划单价,sum(计划金额) as 计划金额,部门,分类 from dinge group by nvl(材料编码,材料名称),部门 into cursor temp


不知道上述情况下我该如何才能实现我想要的这种需求?
...全文
100 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyxin2121921 2009-12-21
  • 打赏
  • 举报
回复
由于时间紧张 错后了结题的时间 见谅
十豆三 2009-12-11
  • 打赏
  • 举报
回复
Set Enginebehavior 70
Select 材料编码,材料名称,规格型号,计量单位,Sum(数量) As 数量,计划单价,Sum(计划金额) As 计划金额,部门,分类,Nvl(材料编码,材料名称) As 汇总用字段 From dinge Group By 汇总用字段,部门 Into Cursor temp

Select 材料编码,材料名称,规格型号,计量单位,Sum(数量) As 数量,计划单价,Sum(计划金额) As 计划金额,部门,分类,Nvl(材料编码,材料名称) As 汇总用字段 From dinge Group By 10,8 Into Cursor temp
wwwwb 2009-12-11
  • 打赏
  • 举报
回复
你是用VFP?
金额 number(10,2),;
部门 varchar(20),;
分类 varchar(20))
insert into dinge values( '01000001','热轧盘条 6-Q235-A ', ' TSK202-58-51-106','千克',0.65,4.4,2.86,'附件','G')
insert into dinge values( '01000001','圆钢', '冷拉圆钢 6-Q235-A ','千克',0,4.4,0,'附件','G')
insert into dinge values( '01000001','圆钢', '冷拉圆钢 6-Q235-A ','千克', 3.55,4.1, 15.62,'钢结构分厂','G')
insert into dinge values( '01000001','圆钢', '','千克', 0.12,4.4, 0.528,'钢结构分厂','G')

如果材料编码字段部分有为空,你怎么处理?
cyxin2121921 2009-12-11
  • 打赏
  • 举报
回复
create table dinge 
(
材料编码 varchar(20),
材料名称 varchar(30),
规格型号 varchar(30),
计量单位 varchar(10),
数量 number(10,2)
单价 number(10,2),
金额 number(10,2),
部门 varchar(20),
分类 varchar(20)
)
insert into dinge select '01000001','热轧盘条 6-Q235-A ', ' TSK202-58-51-106','千克',0.65,4.4,2.86,'附件','G'
insert into dinge select '01000001','圆钢', '冷拉圆钢 6-Q235-A ','千克',0,4.4,0,'附件','G'
insert into dinge select '01000001','圆钢', '冷拉圆钢 6-Q235-A ','千克', 3.55,4.1, 15.62,'钢结构分厂','G'
insert into dinge select '01000001','圆钢', '','千克', 0.12,4.4, 0.528,'钢结构分厂','G'



/*
要得到这样的报表:
材料编码 材料名称 规格型号 计量单位 数量 单价 金额 部门 分类
01000001 热轧盘条 6-Q235-A TSK202-58-51-106 千克 0.65 4.4 2.86 附件 G
010000001 圆钢 冷拉圆钢 6-Q235-A 千克 3.67 4.4 16.148 钢结构分厂 G

drop table dinge

但是在实际情况下 ,记录中的材料编码字段部分有为空的情况,这样的记录就不打算进行分类合并了,而我想利用如下的语句直接直接求解
set ENGINEBEHAVIOR 70
select 材料编码,材料名称,规格型号,计量单位,sum(数量) as 数量,计划单价,sum(计划金额) as 计划金额,部门,分类 from dinge group by 材料编码,部门 into cursor temp
但是却不知道为什么只是统计出来了“想要的报表”中的第一条记录,即
01000001 热轧盘条 6-Q235-A TSK202-58-51-106 千克 0.65 4.4 2.86 附件 G

我想利用一个if语句进行判断,
If !empty(材料编码)
select 材料编码,材料名称,规格型号,计量单位,sum(数量) as 数量,计划单价,sum(计划金额) as 计划金额,部门,分类 from dinge group by材料编码,部门 into cursor temp
endif

但是结果仍然是上面的那一条记录。
不知道这样的情况该如何去写?
ACMAIN_CHM 2009-12-10
  • 打赏
  • 举报
回复
首先语法上,必须改成如下。

select 材料编码,材料名称,规格型号,计量单位,sum(数量) as 数量,计划单价,sum(计划金额) as 计划金额,部门,分类 
from dinge
group by 材料编码,材料名称,规格型号,计量单位,计划单价,部门,分类


关键看你是想实现什么功能。

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试。

WWWWA 2009-12-10
  • 打赏
  • 举报
回复
根据你的要求

如果“材料编码”字段不为空的记录,就按照“材料编码”和“部门”进行汇总
如果“材料编码”字段为空的记录,就按照“材料名称”和“部门”进行汇总

生成一个新的字段
nvl(材料编码,材料名称) as newbm
根据这个字段汇总,最好用规范的SQL语句
cyxin2121921 2009-12-10
  • 打赏
  • 举报
回复
我这里使用的是6.0语句形式 用了SET ENGINEBEHAVIOR 70 这个语句 让VFP9.0兼容了6.0语句
因为我的里面好多数据不是很规范
及时是相同的“材料编码”有可能对应的“规格型号”都存在不一样
如果group by 后面都加上的话 我汇总出来的数据就不对了
WWWWA 2009-12-10
  • 打赏
  • 举报
回复
select newbm from (
select nvl(材料编码,材料名称) as newbm,* from tt ) a
group by newbm

上述代码有问题
WWWWA 2009-12-10
  • 打赏
  • 举报
回复
select nvl(材料编码,材料名称),部门,sum(计划金额),sum(数量) from tt
group by nvl(材料编码,材料名称)

其余字段自行添加

2,726

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧