| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1103 人关注过本帖
标题:一个比较难的算法
取消只看楼主 加入收藏
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
 问题点数:0 回复次数:13 
一个比较难的算法

现在有表1
odate sdate edate
2006-1-2 2006-1-1 2006-1-2
2006-1-5 2006-1-1 2006-1-5
2006-1-7 2006-1-1 2006-1-7
2006-1-8 2006-1-1 2006-1-8
2006-2-1 2006-1-28 2006-2-1
2006-2-2 2006-1-28 2006-2-2
*********
表2
odate qty
2006-1-2 20
2006-1-5 40
2006-1-7 50
2006-1-8 30
2006-2-1 30
2006-2-2 20
*******************
现在要实现 如下
odate qty tqty
2006-1-2 20 20
2006-1-5 40 20+40=60
2006-1-7 50 20+40+50=110
2006-1-8 30 20+40+50+30=140
2006-2-1 30 30
2006-2-2 20 30+20=50
**********
也就是判断表2中的odate是表1中对应odate的sdate和edate范围,然后把表2中sdate和edate时间内qty的数量求和作为tqty,这该如何实现???

搜索更多相关主题的帖子: 算法 
2006-05-30 18:17
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 
斑竹大哥,我用你的查询试过,怎么算出来的全是190呢? 没有达到我要的效果阿,麻烦再帮忙看看?
2006-05-31 11:51
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 

晕~~ 全复制就可以用,可是where a.odate=#temp1.odate
where a.odate=#temp1.odate
from #temp1 a
这三句我看不懂啊?a是哪里来的阿?from #temp1 a
这个怎么理解呢?我新手,不懂啊
麻烦你解说一下,谢谢

2006-05-31 12:04
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 
你的嵌套查询我能看懂,可是我没有看到你在什么地方起的这个别名阿?还有from #temp1 a 中间不需要逗号吗?
2006-05-31 12:23
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 
吐血~~~ 大哥你不是耍人吗,那你的a就是代表 #temp1了?那
where a.odate=#temp1.odate
where a.odate=#temp1.odate
又是什么意思呢?
另外如果出现下面的错误怎么解决呢?
“子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”
2006-05-31 12:37
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 
select *
from #tmp3
得到如下数据 #tmp3
order_date
2006-1-4
startdate
2006-1-1
enddate
2006-1-4
2006-1-5 2006-1-1 2006-1-5
2006-1-6 2006-1-1 2006-1-6
2006-1-9 2006-1-1 2006-1-9
2006-1-10 2006-1-1 2006-1-10
2006-1-11 2006-1-1 2006-1-11
select *
from #tmp2
得到如下
order_date
2006-1-4
type
china
family_code
hid
damount
415615.3
2006-1-5 china hid 2052-1-4
2006-1-6 ulc el 148597.1
2006-1-9 ulc el 229007.5
2006-1-10 china el 102882.5
2006-1-11 china el 113491.4
我要做的就是分类汇总,根据type,family_code
我用你上面的查询的话,加上group by type,family_code 他会报错
查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。那我要实现分类汇总的话要如何做呢??

select order_date,
(
select sum(Damount)
from #tmp2
where order_date between
(
select startdate from #tmp3
where a.order_date=#tmp3.order_date
)
and
(
select enddate from #tmp3
where a.order_date=#tmp3.order_date
)
group by type,family_code
) as Tamount
from #tmp3 a

[此贴子已经被作者于2006-5-31 13:33:28编辑过]

2006-05-31 13:16
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 

用这个查询的话所有的都是空值

[此贴子已经被作者于2006-5-31 14:28:42编辑过]

2006-05-31 14:01
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 
select *
from #tmp3
得到如下数据 #tmp3
order_date
2006-1-4
startdate
2006-1-1
enddate
2006-1-4
2006-1-5 2006-1-1 2006-1-5
2006-1-6 2006-1-1 2006-1-6
2006-1-9 2006-1-1 2006-1-9
2006-1-10 2006-1-1 2006-1-10
2006-1-11 2006-1-1 2006-1-11
select *
from #tmp2
得到如下
order_date
2006-1-4
type
china
family_code
hid
damount
2
2006-1-4
2006-1-5
ulc
china
el
hid
3
4
2006-1-5
2006-1-6
china
china
el
el
5
6
2006-1-9 ulc el 7
2006-1-10 china el 8
2006-1-11 china el 9

我想要得到如下
order_date type family_code Tamount
2006-1-4 china hid 2
2006-1-4 china el 0
2006-1-4 ulc el 3
2006-1-5 china hid 2+4=6
2006-1-5 china el 0+5=5
2006-1-5 ulc el 3+0=3
2006-1-6 china hid 2+4+0=6
2006-1-6 china el 0+5+6=11
2006-1-6 ulc el 3+3+0=6
2006-1-9 china hid 2+4+0+0=6
2006-1-9 china el 0+5+6+0=11
2006-1-9 ulc el 3+3+0+7=13
......
就是这样了
2006-05-31 16:31
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 
其实我要的跟一开始差不多,唯一的区别就是

select order_date,
(
******* 我想能否把这里的求和做成分类求和呢?也就是按#tmp2中的type字段和family_code字段分类汇总,不过好像不能把有多个返回值的子查询放到一个查询中阿

select sum(Damount)
from #tmp2
where order_date between
(
select startdate from #tmp3
where a.order_date=#tmp3.order_date
)
and
(
select enddate from #tmp3
where a.order_date=#tmp3.order_date
)

) as Tamount
from #tmp3 a
2006-05-31 16:41
jerryzhao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-29
收藏
得分:0 
实际中是不会有空值的,不过,我用你查询试了,Tamount的值全是Null阿?是算不出来的阿?
2006-05-31 17:19
快速回复:一个比较难的算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026253 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved