SQL

时间:2016-06-02 10:31:22

标签: sql sql-server sql-server-2008

我想获取列

[QB Revision History],[Pervious QB Revision History]

根据列

对它们进行分组
Code

但我不能这样做。我得到这两列

[QB Revision History],[Pervious QB Revision History]

使用属性

ROW_NUMBER()


select ROW_NUMBER()OVER( 
               ORDER BY CONVERT(DateTime, '01-'+t1.[MonthTitle]) asc) AS rownum,
       t1.[MonthTitle],t1.[Code],t1.[QB Revision History].
into #temp21 
from tbl_SampleQBSizeCDP t1 
group by Code,[MonthTitle],[QB Revision History]

我正在尝试使用此查询,但它没有给出预期的结果。

select  t1.*,t2.[QB Revision History] as [Pervious QB Revision History] 
#into #temp22 from #temp21 t1, #temp21 t2  
where  t1.Code=t2.Code and t1.rownum>t2.rownum

任何人都可以帮我解决这个问题吗? 输入: rownum MonthTitle代码QB修订历史 1月16日DFSAWGTESTQB51010新版 4月16日DFSAWGTESTQB51010 R1 5月11日 - 16日DFSAWGTESTQB51010改造

输出: rownum MonthTitle Code QB修订历史Pervious QB修订历史 4月16日DFSAWGTESTQB51010 R1新 5月11日 - 16日DFSAWGTESTQB51010改造新版 5月11日至16日DFSAWGTESTQB51010改造版R1

预期产出:

rownum MonthTitle Code QB修订历史Pervious QB修订历史 4月16日DFSAWGTESTQB51010 R1新 5月11日至16日DFSAWGTESTQB51010改造版R1

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要的功能是LAG(),而不是ROW_NUMBER()

select t1.[MonthTitle], t1.[Code], t1.[QB Revision History],
       LAG([QB Revision History]) OVER (ORDER BY CONVERT(DateTime, '01-'+t1.[MonthTitle]
                                       ) as prev_revisition_history
 into #temp21
from tbl_SampleQBSizeCDP t1;

我不确定order by的用途。您的SELECT没有聚合功能。没有样本数据和期望的结果,似乎没有必要。

编辑:

在SQL Server 2008中,您可以使用outer apply

select t1.[MonthTitle], t1.[Code], t1.[QB Revision History],
       t2.QB Revision History]) as prev_revisition_history
into #temp21
from tbl_SampleQBSizeCDP t1 outer apply
     (select top 1 t2.*
      from tbl_SampleQBSizeCDP t2
      where CONVERT(DateTime, '01-'+t2.[MonthTitle]) < CONVERT(DateTime, '01-'+t1.[MonthTitle])
      order by CONVERT(DateTime, '01-'+t2.[MonthTitle]) desc
     ) t2