0 0

SQL 查询求值------谢谢大师3

查询求值


表一:(行情表)tb_trade_0160
ID                                DATE(日行情1)                 cusum (行情额度1)
78460                         1991-04-12                     50.00
78460                         1991-04-13                     60.00
78460                         1991-04-14                     70.00
678460                       1991-04-15                     190
78460                         1991-04-16                     200
78460                         1991-05-13                     230
78460                         1991-05-14                     250
78460                         1991-05-15                     300
78460                         1991-05-16                     350

表二 :(复权表)tb_trade_0168
ID                                DATE(日行情2)              cusum (行情额度2)
78460                         1991-04-15                     203.00
78460                         1991-05-14                     601.00
78460                         1991-05-16                     707.00
我想实现的是:
用行情表tb_trade_0160里面的(DATE(日行情1)) 这个日期去跟:(复权表)tb_trade_0168 的这个日期( DATE(日行情2))去匹对
如果相信两个日期如:DATE(日行情1) 1991-04-15   =DATE(日行情2)1991-04-15    那么此时   cusum (行情额度1)
的值应该是   cusum (行情额度2)的值    
最终实现结果如下
ID                            DATE(日行情)                  cusum (行情额度)
78460                         1991-04-12                      50.00
78460                         1991-04-13                      60.00
78460                         1991-04-14                      70.00
678460                        1991-04-15             203.00 ---重点(看看是从哪里去)
78460                         1991-04-16             203.00 ---重点(看看是从哪里去)
78460                         1991-05-13             203.00 ---重点(看看是从哪里去)
78460                         1991-05-14             601.00---重点(看看是从哪里去)
78460                         1991-05-15             601.00---重点(看看是从哪里去)
78460                         1991-05-16                         707.00
大家能看明白吧

问题补充:
haidage 写道
select    
t1.id,   
t1.date,   
cusum from tb_trade_0160 t1   
left outer join tb_trade_0168 t2 on (t1.date = t2.date) 

您好,给你解释一下。
首先要出现你的结果就要做个连接查询,两个表的左连接查询后结果是这样的
ID                  DATE(日行情)                  cusum (行情额度)
78460               1991-04-12                  null
78460               1991-04-13                  null
78460               1991-04-14                  null
678460              1991-04-15                  203.00
78460               1991-04-16                  203.00
78460               1991-05-13                  203.00
78460               1991-05-14                  601.00
78460               1991-05-15                  601.00
78460               1991-05-16                  707.00

但是cusum这个列的是要取t的值,所以在列取值的时候要做一下判断所以在
case when cusum is null then t1.cusum then t2.cusum end
这句话的意思就是如果cusum列有null值就会取表tb_trade_0160中的cusum值否则取tb_trade_0168 中的sucum的值,不知道这下你明白了吗?

很开心你给我的解释,但是你的实现方法并不是我要求实现的结果啊,我在我这里执行根本没有达到我要求的结果啊 还有你的 IS NULL 用的也不对啊,你至少要用到这个函数啊 isnull 你可能要理解一下这两个函数的区别了啊

问题补充:
haidage 写道
哦,对不起。我弄错了。这个题还挺难。一时还没有想到。对不起了。

恩,没有关系了,我很感谢你能替我分析,主要我们很难发现这个题如何下手,所以我都想了好久了都是不知道怎么解决,如果你能想到随时告诉我,我们也算认识做个技术交流的朋友
2010年4月13日 10:23

5个答案 按时间排序 按投票排序

0 0

采纳的答案

sql2008:

ids=Row_Number() over (order by t1.date)

2010年4月14日 14:23
0 0

declare  @t table(ids  int identity(1,1), id varchar(10),date datetime,custom int)
insert @t 
select  t1.id,t1.date,t2.cusum from tb_trade_0160 
t1 left join tb_trade_0168 t2 on t1.date <= t2.date
select * from @t
where ids in 
(
select min(ids) as minid 
from @t group by date
)

结果:
ids	id	date	custom
1	78460	1991-04-12 00:00:00.000	203
4	78460	1991-04-13 00:00:00.000	203
7	78460	1991-04-14 00:00:00.000	203
10	678460	1991-04-15 00:00:00.000	203
13	78460	1991-04-16 00:00:00.000	601
15	78460	1991-05-13 00:00:00.000	601
17	78460	1991-05-14 00:00:00.000	601
19	78460	1991-05-15 00:00:00.000	707
20	78460	1991-05-16 00:00:00.000	707


你表没有唯一标识列,加辅助列操作。如果是sql2008直接用rowid()也可以

2010年4月14日 14:15
0 0

哦,对不起。我弄错了。这个题还挺难。一时还没有想到。对不起了。

2010年4月14日 13:48
0 0

select    
t1.id,   
t1.date,   
cusum from tb_trade_0160 t1   
left outer join tb_trade_0168 t2 on (t1.date = t2.date) 

您好,给你解释一下。
首先要出现你的结果就要做个连接查询,两个表的左连接查询后结果是这样的
ID                  DATE(日行情)                  cusum (行情额度)
78460               1991-04-12                  null
78460               1991-04-13                  null
78460               1991-04-14                  null
678460              1991-04-15                  203.00
78460               1991-04-16                  203.00
78460               1991-05-13                  203.00
78460               1991-05-14                  601.00
78460               1991-05-15                  601.00
78460               1991-05-16                  707.00

但是cusum这个列的是要取t的值,所以在列取值的时候要做一下判断所以在
case when cusum is null then t1.cusum then t2.cusum end
这句话的意思就是如果cusum列有null值就会取表tb_trade_0160中的cusum值否则取tb_trade_0168 中的sucum的值,不知道这下你明白了吗?

2010年4月13日 15:40
0 0

[size=medium]

select 
t1.id,
t1.date,
(case when t1.cusum is null then t2.cusum else t1.cusum end) cusum // 关键是这句你看一下意思就是左连接判断t1表中cusum 是否为空为空取t2表中的cusum值否则去表一中的值
from tb_trade_0160 t1
left outer join tb_trade_0168 t2 on (t1.date = t2.date)
[/size]

2010年4月13日 11:39

相关推荐

Global site tag (gtag.js) - Google Analytics