2015-01-06 77 views
0

每個人!TSQL - 使用光標刪除重複記錄

我有一張表有幾列:Part_NoChecksheets

任何給定的Part_No都可能有多個需要執行的檢查單。

我試圖消除重複PART_NO的,所以我的電子表格最終會是這個樣子:

Part_No | Checksheet 
Part1 | Part1checksheet1 
     | Part1checksheet2 
     | Part1checksheet3 
     | Part1checksheet4 
Part2 | Part2checksheet1 
     | Part2checksheet2 
Part3 | Part3checksheet1 
     | Part3checksheet2 
     | Part3checksheet3 

,而不是像這樣:

Part_No | Checksheet 
Part1 | Part1checksheet1 
Part1 | Part1checksheet2 
Part1 | Part1checksheet3 
Part1 | Part1checksheet4 
Part2 | Part2checksheet1 
Part2 | Part2checksheet2 
Part3 | Part3checksheet1 
Part3 | Part3checksheet2 
Part3 | Part3checksheet3 

我假設我想創建一個變量,使用光標遍歷每行並檢查部件號,但我不知道如何解決這個問題。

感謝任何人都可以幫助!

+0

這是SQL Server上的罰款。演示期間您可能想要這樣做。 – dario

+4

遊標很少是一個好選擇..你是什麼意思的「電子表格」?一個SQL表應該類似於第二個例子,而不是第一個例子 - 你是否要求SELECT查詢產生類似於第一個例子的輸出? –

+0

你可以用row_number()來做到這一點http://msdn.microsoft.com/en-us/library/ms186734.aspx – Paparazzi

回答

2

創建一個視圖:

create view vw_ForExcel as (
select 
    case when row_number() over (partition by Part_No order by Part_No) = 1 then Part_No else '' end as Part_No, 
    Checksheet 
from THE_TABLE 
) 

然後將其導出(或SELECT * FROM dbo.vw_ForExcel

+1

呃......你應該怎麼點這個?你應該在視圖中包含一個實際的'Part_No'列,因爲你需要一個'ORDER BY'子句,否則就是'RANK()OVER(ORDER BY Part_No)'。 –