查询求值
表一:(行情表)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 [color=cyan]203.00 [/color]---重点(看看是从哪里去)
78460 1991-04-16 [color=cyan]203.00 [/color]---重点(看看是从哪里去)
78460 1991-05-13 [color=cyan]203.00 [/color]---重点(看看是从哪里去)
78460 1991-05-14 [color=green]601.00[/color]---重点(看看是从哪里去)
78460 1991-05-15 [color=green]601.00[/color]---重点(看看是从哪里去)
78460 1991-05-16 707.00
大家能看明白吧
sql2008:
[code="java"]
ids=Row_Number() over (order by t1.date)
[/code]
[size=medium][code="sql"]
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)
[/code][/size]
[code="sql"]
select
t1.id,
t1.date,
cusum from tb_trade_0160 t1
left outer join tb_trade_0168 t2 on (t1.date = t2.date)
[/code]
您好,给你解释一下。
首先要出现你的结果就要做个连接查询,两个表的左连接查询后结果是这样的
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的值,不知道这下你明白了吗?
:cry: 哦,对不起。我弄错了。这个题还挺难。一时还没有想到。对不起了。
[code="java"]
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
)
[/code]
结果:
[code="java"]
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
[/code]
你表没有唯一标识列,加辅助列操作。如果是sql2008直接用rowid()也可以