我有這樣的查詢:正在刪除重複記錄只有1行中的SQL
Select * From T_Trans_HHT Where transType='OUT' and docNum='15/01979' order by ItemCode
我收到重複的記錄是這樣的:我的每一個項目的代碼來了2次,所以我想刪除一個項目代碼從我的桌子上排? 我這樣放:
在這我想刪除一行,我怎麼能做到這一點?
我有這樣的查詢:正在刪除重複記錄只有1行中的SQL
Select * From T_Trans_HHT Where transType='OUT' and docNum='15/01979' order by ItemCode
我收到重複的記錄是這樣的:我的每一個項目的代碼來了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
除非還指定了TOP或FOR XML,否則ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式中無效。 –
雖然我使用你的第一個查詢 –
@Jonathan:在WHERE子句之後不需要ORDER BY。 – Wanderer
使用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;
ullas ,,我試過這個查詢,但沒有得到正確的結果 –
,而我執行我的查詢我得到20條記錄,每個項目代碼重複1次,我只需要得到10行?我怎麼能得到這個? –
@jasbacker:你需要從表格中刪除重複的權利? – Wanderer
DELETE TOP(1) From T_Trans_HHT
Where transType='OUT'
and docNum='15/01979'
order by ItemCode
這爲我工作
SET ROWCOUNT 1
DELETE FROM [table] WHERE ....
SET ROWCOUNT 0
所有列複製?如果是這樣,請使用'select distinct'。我假設你想**只顯示**唯一記錄,而不是實際刪除記錄 –
嘗試使用現有建議:http://stackoverflow.com/questions/11122749/sql-query-to-delete-only-one-duplicate -row –