问高手SQL写法, 补齐时间.

sunshina01 2014-12-13 10:20:53
表和数据脚本:

CREATE TABLE [dbo].[TabPrice](
[ID] [int] NOT NULL,
[matnr] [nchar](10) NULL,
[mdate] [date] NULL,
[price] [int] NULL)

CREATE TABLE [dbo].[TabDate](
[mdate] [date] NOT NULL)

INSERT INTO[TabPrice]
values (100,'A01','2014-08-01',23)
INSERT INTO[TabPrice]
values (101,'A02','2014-08-05',43)
INSERT INTO[TabPrice]
values (102,'A02','2014-08-07',50)

insert into tabdate
values ('2014-08-01')
insert into tabdate
values ('2014-08-02')
insert into tabdate
values ('2014-08-03')
insert into tabdate
values ('2014-08-04')
insert into tabdate
values ('2014-08-05')
insert into tabdate
values ('2014-08-06')
insert into tabdate
values ('2014-08-07')
insert into tabdate
values ('2014-08-08')
insert into tabdate
values ('2014-08-09')
insert into tabdate
values ('2014-08-10')


现在想实现的功能:把NULL值,用最近一次日期对应的值,补充上去.

select b.ID,b.matnr,b.mdate,b.price
from dbo.tabdate as a left join dbo.TabPrice as b
on a.mdate = b.mdate

出来有很多NULL值,
100 A01 2014-08-01 23
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
101 A02 2014-08-05 43
NULL NULL NULL NULL
102 A02 2014-08-07 50
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL

想要的结果是:
100 A01 2014-08-01 23
100 A01 2014-08-02 23
100 A01 2014-08-03 23
100 A01 2014-08-04 23
101 A02 2014-08-05 43
101 A02 2014-08-06 43
102 A02 2014-08-07 50

也就是8.1号 - 5号之间,用1号的数据自动填充到2号,3号,4号。 注意,1号可能有多条件记录., 如果有多条记录,那么2号也是多条记录。

求高手!!!

...全文
300 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2014-12-15
  • 打赏
  • 举报
回复
完成这个功能,不一定要死磕在SQL语句上, 其他高级语言去哪儿了
Tiger_Zhao 2014-12-15
  • 打赏
  • 举报
回复
        SELECT  b.ID,b.matnr,b.mdate,b.price
FROM tabdate as a
OUTER APPLY (
SELECT TOP 1 *
FROM TabPrice
WHERE mdate <= a.mdate
ORDER BY mdate DESC
) as b
---涛声依旧--- 2014-12-14
  • 打赏
  • 举报
回复

SELECT * FROM TabPrice
UNION 
SELECT   t1.id,t1.matnr,dateadd(day,number,t1.mdate) as mdate,t1.price
from master..spt_values with(nolock) 
INNER JOIN TabPrice t1 ON dateadd(day,number,t1.mdate)>=t1.mdate
INNER JOIN TabPrice t2 ON t1.id+1=t2.id
where type='P' and number>=0
and DATEDIFF(day,t1.mdate,t2.mdate)>number

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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