轴号         日期
 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.   

    啥,没看明白,断章取义就是:"同一轴号,两个时间段取值" :)DECLARE @tab TABLE(轴号 INT,日期 DATETIME)
     
    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
      

  2.   


    问题是日期是从数据库里取出来的~   
    SET @日期1 = CAST('2010-5-1' AS DATETIME) 用这句肯定不行的吧
      

  3.   

    --> 测试数据:入库
    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
      

  4.   


    SELECT * FROM 出库表
    --> 删除表格
    --DROP TABLE 出库表
    ;with e as (
    select ROW_NUMBER() over(PARTITION by 轴号 order by 日期) as id,* from 入库
    )高手,这个;with e 是什么?
      

  5.   

    一般表达式,2005版本以上可用
    要和下面的select语句一起选中,查询。
      

  6.   


    杯具了~~SQL SERVER环境得是2000版本的~