2014-05-08 47 views
1

我有一個表以下抽樣行:SQL Server視圖

Id CompanyId value 
1 X   a 
2 X   b 
3 X   c 
4 X   d 
5 Y   e 
6 Y   f 
7 z   g 
8 Z   h 
9 X   i 
10 X   j 

我想有以下結果的看法:

Id CompanyId ParentId 
1 X   NULL 
2 X   NULL 
3 X   NULL 
4 X   NULL 
5 Y   1 
6 Y   1 
7 z   5 
8 Z   5 
9 X   7 
10 X   7 

在這個結果對每個計算的ParentId行。每個行的ParentId等於先前companyId的第一行的Id。

回答

0

我希望SQL Server 2012的標籤是這裏的原因:)

;with x as (
    select *, lag(companyid) over(order by id) as prev 
    from #t1 
), 
y as (
    select *, sum(case when prev = companyid then 0 else 1 end) over(order by id) as grp 
    from x 
) 

select y.id, y.companyid, min(y1.id) 
from y 
left join y y1 on y1.grp = y.grp-1 
group by y.id, y.companyid 
+0

我使用SQL Server 2008 R2和不能運行滯後命令。 –

+0

但你確實把2012年的標籤,不是嗎? – dean

+0

是的。我的開發服務器是SQL Server 2012,我的操作服務器是SQL Server 2008R2。我無法將您的查詢從開發數據庫移動到運營數據庫。 –