2015-11-24 101 views
-1

我有這樣的查詢:正在刪除重複記錄只有1行中的SQL

Select * From T_Trans_HHT Where transType='OUT' and docNum='15/01979' order by ItemCode 

我收到重複的記錄是這樣的:我的每一個項目的代碼來了2次,所以我想刪除一個項目代碼從我的桌子上排? 我這樣放: enter image description here

在這我想刪除一行,我怎麼能做到這一點?

+0

所有列複製?如果是這樣,請使用'select distinct'。我假設你想**只顯示**唯一記錄,而不是實際刪除記錄 –

+1

嘗試使用現有建議:http://stackoverflow.com/questions/11122749/sql-query-to-delete-only-one-duplicate -row –

回答

2

使用CTE和ROW_NUMBER

;with CTE AS 
    (Select *,ROW_NUMBER()OVER(PARTITION BY Docnum,location 
    ORDER BY transDATEtime desc)RN 
    From T_Trans_HHT 
    Where transType='OUT' and 
    docNum='15/01979') 

    delete from CTE where RN = 1 

或使用

DISTINCT and Group BY all columns 
select distinct col1,col2 ... from table 
Group by all columns 
+0

除非還指定了TOP或FOR XML,否則ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式中無效。 –

+0

雖然我使用你的第一個查詢 –

+0

@Jonathan:在WHERE子句之後不需要ORDER BY。 – Wanderer

0

使用ROW_NUMBER()CTE

查詢

;WITH CTE AS 
(
    SELECT rn = ROW_NUMBER() OVER 
    (
     PARTITION BY ItemCode 
     ORDER BY ItemCode 
    ), * FROM T_Trans_HHT 
    WHERE transType='OUT' 
    AND docNum='15/01979' 
) 
DELETE FROM CTE 
WHERE RN > 1; 
+0

ullas ,,我試過這個查詢,但沒有得到正確的結果 –

+0

,而我執行我的查詢我得到20條記錄,每個項目代碼重複1次,我只需要得到10行?我怎麼能得到這個? –

+0

@jasbacker:你需要從表格中刪除重複的權利? – Wanderer

1
DELETE TOP(1) From T_Trans_HHT 
Where transType='OUT' 
and docNum='15/01979' 
order by ItemCode 
0

這爲我工作

SET ROWCOUNT 1 
DELETE FROM [table] WHERE .... 
SET ROWCOUNT 0