select * from(
            select * from
               (     
                 select * from (select * from Orders) a 
                               full join (select * from PatientCome) b 
                               on a.GUID = b.ComeGUID
               ) c
               where (c.ProjectID=16 or RealProjectID=16)
                  and 
                 (
                   (convert(varchar(10),Time,120) >= '2010-01-01' and convert(varchar(10),Time,120) <='2015-02-02') 
                   or (convert(varchar(10),TimeC,120) >= '2010-01-01' and convert(varchar(10),TimeC,120) <='2015-02-02') 
                 )
              ) d通过这条sql语句,形成了一个“虚拟表d”,经观察数据发现,还应添加一个自动增长的ID列,请问应该怎么改写这条语句?

解决方案 »

  1.   

    再说一下我的目的,是用这张虚拟表做一个查重的功能 代码如下WITH CTE AS (
    select * from(
                select * from
                   (     
                     select * from (select * from Orders) a 
                                   full join (select * from PatientCome) b 
                                   on a.GUID = b.ComeGUID
                   ) c
                   where (c.ProjectID=16 or RealProjectID=16)
                      and 
                     (
                       (convert(varchar(10),Time,120) >= '2010-01-01' and convert(varchar(10),Time,120) <='2015-02-02') 
                       or (convert(varchar(10),TimeC,120) >= '2010-01-01' and convert(varchar(10),TimeC,120) <='2015-02-02') 
                     )
                  ) d
    )
    SELECT * FROM CTE A
    WHERE EXISTS (
    SELECT 1 FROM CTE WHERE Name = A.Name AND ID <> A.ID) order by Name
    注意倒数第二行代码,我就是想用那个ID来区分查重中的不同
      

  2.   

    晕,,会成那样了我指的倒数第二行代码是->AND ID <> A.ID
      

  3.   

    ;WITH CTE AS (
    select * 
    ,ID = ROW_NUMBER() OVER (ORDER BY NAME,NEWID())
    from(
                select * from
                   (     
                     select * from (select * from Orders) a 
                                   full join (select * from PatientCome) b 
                                   on a.GUID = b.ComeGUID
                   ) c
                   where (c.ProjectID=16 or RealProjectID=16)
                      and 
                     (
                       (convert(varchar(10),Time,120) >= '2010-01-01' and convert(varchar(10),Time,120) <='2015-02-02') 
                       or (convert(varchar(10),TimeC,120) >= '2010-01-01' and convert(varchar(10),TimeC,120) <='2015-02-02') 
                     )
                  ) d
    )
    SELECT * FROM CTE A
    WHERE EXISTS (
    SELECT 1 FROM CTE WHERE Name = A.Name AND ID <> A.ID) order by Name