轴号 日期
1 2010-5-1
1 2010-6-2
1 2010-7-3
2 2010-5-9
2 2010-6-8
3 2010-5-8类似这样的一张表,我想用第一条数据:轴号1和日期2010-5-1 和 第二条:轴号1日期2010-6-2 同一个轴号,两个时间段,去查询一个结果值,这个结果记录跟第一条记录并排放~然后继续,同一轴号,两个时间段继续取值
这样用SQL能直接做么?
1 2010-5-1
1 2010-6-2
1 2010-7-3
2 2010-5-9
2 2010-6-8
3 2010-5-8类似这样的一张表,我想用第一条数据:轴号1和日期2010-5-1 和 第二条:轴号1日期2010-6-2 同一个轴号,两个时间段,去查询一个结果值,这个结果记录跟第一条记录并排放~然后继续,同一轴号,两个时间段继续取值
这样用SQL能直接做么?
INSERT INTO @tab(轴号,日期)
select 1,'2010-5-1' union all
select 1,'2010-6-2' union all
select 1,'2010-7-3' union all
select 2,'2010-5-9' union all
select 2,'2010-6-8' union all
select 3,'2010-5-8'DECLARE @轴号 INT
DECLARE @日期1 DATETIME
DECLARE @日期2 DATETIMESET @轴号 =1
SET @日期1 = CAST('2010-5-1' AS DATETIME)
SET @日期2 = CAST('2010-6-2' AS DATETIME)SELECT *
FROM @tab AS t WHERE t.轴号 = @轴号 AND t.日期 BETWEEN @日期1 AND @日期2
问题是日期是从数据库里取出来的~
SET @日期1 = CAST('2010-5-1' AS DATETIME) 用这句肯定不行的吧
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'入库')
AND type in (N'U'))
DROP TABLE 入库
GO---->建表
create table 入库([轴号] int,[日期] datetime)
insert 入库
select 1,'2010-5-1' union all
select 1,'2010-6-2' union all
select 1,'2010-7-3' union all
select 2,'2010-5-9' union all
select 2,'2010-6-8' union all
select 3,'2010-5-8'
GO
--> 测试数据:出库表
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'出库表')
AND type in (N'U'))
DROP TABLE 出库表
GO---->建表
create table 出库表([出库日期] datetime,[轴号] int,[数量] int)
insert 出库表
select '2010-5-10',1,10 union all
select '2010-5-20',2,20
GO--> 查询结果
SELECT * FROM 入库
--> 删除表格
--DROP TABLE 入库
/**
需求结果:
轴号 日期1 日期2 数量
1 2010-5-1 2010-6-2 10
2 2010-5-9 2010-6-8 20
**/--> 查询结果
SELECT * FROM 出库表
--> 删除表格
--DROP TABLE 出库表
;with e as (
select ROW_NUMBER() over(PARTITION by 轴号 order by 日期) as id,* from 入库
)
SELECT a.轴号,
T.日期 as 日期1 ,
(select e.日期 from e where e.轴号= T.轴号 and e.id=T.id+1) as 日期2,a.数量
FROM 出库表 as a left join e T
on a.轴号 = T.轴号
---------------------------------
轴号 日期1 日期2 数量
1 2010-05-01 00:00:00.000 2010-06-02 00:00:00.000 10
1 2010-06-02 00:00:00.000 2010-07-03 00:00:00.000 10
1 2010-07-03 00:00:00.000 NULL 10
2 2010-05-09 00:00:00.000 2010-06-08 00:00:00.000 20
2 2010-06-08 00:00:00.000 NULL 20
SELECT * FROM 出库表
--> 删除表格
--DROP TABLE 出库表
;with e as (
select ROW_NUMBER() over(PARTITION by 轴号 order by 日期) as id,* from 入库
)高手,这个;with e 是什么?
要和下面的select语句一起选中,查询。
杯具了~~SQL SERVER环境得是2000版本的~