求一条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


不知道上述情况下我该如何才能实现我想要的这种需求?
...全文
143 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,750

社区成员

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

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