问题如下:测试内容Date             ID1            IDs1    Num1    X1      Sty1    ID2            IDs2    Num2    X2      Sty2
2011-08-05    NULL         NULL .000 NULL NULL 2011080014 7 17.000 1 B
2011-08-05    NULL      NULL .000 NULL NULL 2011080014 8 13.000 1 B
2011-08-05   2011070051 13 5.000 2 A NULL       NULL .000 NULL NULL
2011-08-05   2011070051 14 10.000 2 A NULL       NULL .000 NULL NULL
2011-08-05   2011070051 15 20.000 2 A NULL       NULL .000 NULL NULL
2011-08-06    NULL      NULL .000 NULL NULL 2011080014 8 13.000 1 B/*-----------想要的结果---------------*/
Date             ID1            IDs1    Num1    X1      Sty1    ID2            IDs2    Num2    X2      Sty2
2011-08-05   2011070051 13 5.000 2 A 2011080014 7 17.000 1 B
2011-08-05   2011070051 14 10.000 2 A 2011080014 8 13.000 1 B
2011-08-05   2011070051 15 20.000 2 A NULL       NULL .000 NULL NULL
2011-08-06    NULL      NULL .000 NULL NULL 2011080014 8 13.000 1 B

解决方案 »

  1.   


    ;with ach as
    (
    select *,rid=row_number() over (partition by date,id1 order by getdate())
    from tb
    )select date,max(id1) id1,max(ids1) ids1,max(Num1) Num1,max(X1) X1,max(Sty1) Sty1,
    max(ID2) ID2,max(IDs2) IDs2,max(Num2) Num2,max(X2) X2,max(Sty2) Sty2
    from ach
    group by date,rid
      

  2.   


    --or;with ach as
    (
    select *,rid=row_number() over (partition by convert(varchar(10),date,120),id1 order by getdate())
    from tb
    )select convert(varchar(10),date,120) date,max(id1) id1,max(ids1) ids1,max(Num1) Num1,max(X1) X1,max(Sty1) Sty1,
    max(ID2) ID2,max(IDs2) IDs2,max(Num2) Num2,max(X2) X2,max(Sty2) Sty2
    from ach
    group by convert(varchar(10),date,120),rid
      

  3.   

    select * from table where case when date<'2011-08-06' then ID1 is not null
    end
      

  4.   

    select * from table where isnull(date,'')!=(case when date<'2011-08-06' then '' end)
    改下,刚才激动了
      

  5.   

    select * from table where isnull(ID1,'')!=(case when date<'2011-08-06' then '' end)
    还是激动了,再改下
      

  6.   

    感谢楼上朋友回复,
    使用max会将数据去掉,
    但是,我要的是每笔数据都要出现.
      

  7.   

    都没有指定关联字段。1和2靠什么规则合成一行啊?那我合成下面这结果也可以啊?
    Date ID1 IDs1 Num1 X1 Sty1 ID2 IDs2 Num2 X2 Sty2
    2011-8-5 2011070051 13 5 2 A 2011080014 7 17 1 B
    2011-8-5 2011070051 14 10 2 A NULL NULL 0 NULL NULL
    2011-8-5 2011070051 15 20 2 A 2011080014 8 13 1 B
    2011-8-6 NULL NULL 0 NULL NULL 2011080014 8 13 1 B
      

  8.   

    同一日期的先后顺序按照ID1或者ID2大小来排序其它只有日期这一个规则难道只能使用一个存储过程来分析了?
      

  9.   

    把表分成两个子查询,一个是ID1为null的,一个是ID1不为null
    两个子查询都再分组排序,增加一个id字段,id=row_number() over (patition by Date order by getdate()),
    两个子查询利用上面的date字段和id字段关联(full join),
    关联后goup by date,isnull(a.id,b.id),
    select 列表取最大值就可以了,
    只能讲个思路,机器一双启动到win7+sql2005,没一会儿就死机,弄不了