我有一些數據,消除有使用CTE
RowIdentifier ID RowID Position Data Rn
1 1 1 a1 A1 1
2 1 2 a2 A2 1
3 1 3 a3 NULL 1
4 1 4 a3 A3 2
5 1 1 b1 B1 1
6 1 2 b2 NULL 1
7 1 3 b2 B2 2
8 1 4 b3 B3 1
所需的輸出是
ID RowID Position Data
1 1 a1 A1
1 1 b1 B1
1 2 a2 A2
1 2 b2 B2
1 3 a3 A3
1 3 b3 B3
我需要清除這些地方的位置被重複行空值的行和其數據爲空。即在示例中,在RowIdentifier 3和4中,Position列中的值爲a3,但thIdIndIdentifier記錄不會出現在最終輸出中,因爲它在Data列中爲null。
的DDL是在
Declare @t table(RowIdentifier int identity,ID int,RowID int,Position varchar(10),Data varchar(10),Rn int)
Insert into @t
Select 1,1,'a1','A1',1 union all
Select 1,2,'a2','A2',1 union all
Select 1,3,'a3',null,1 union all
Select 1,4,'a3','A3',2 union all
Select 1,1,'b1','B1',1 union all
Select 1,2,'b2',null,1 union all
Select 1,3,'b2','B2',2 union all
Select 1,4,'b3','B3',1
Select * from @t
我的做法是在
;with cte as(
Select ID,RowID,Position,Position as p2,Data,RowIdentifier from @t
union all
select c4.ID,c4.RowID,c4.Position,c5.Position , c4.Data,c4.RowIdentifier
from cte c5
join @t c4 on c4.Position = c5.Position
where c5.RowIdentifier < c4.RowIdentifier
)
,
cte2 as(
select * , rn = Row_Number() over(PARTITION by position order by RowIdentifier)
from cte where Data is not null)
select ID,RowID,Position,Data from cte2 where rn =1
但不工作按預期的輸出。我的輸出是
ID RowID Position Data
1 1 a1 A1
1 2 a2 A2
1 4 a3 A3
1 1 b1 B1
1 3 b2 B2
1 4 b3 B3
幫助需要
感謝
當遞歸調用CTE時,您需要終止條件。即'WHERE something
Johan
我已經更新了我的查詢,但輸出結果並不像預期的那樣儘管我很接近...如果你能指出我的查詢中的錯誤 – aditi
爲什麼你想讓「RowID」無關到原來的RowID?它應該是不同的列名稱,並且RowID不應位於輸出中。這是誤導 – gbn