2014-09-26 28 views
1

我想在excel中將公式複製到SQL中,我有一個帶地址的客戶ID代碼列表。SQL如果記錄等於它之前的記錄

我已經連接了郵編和姓氏並按升序排序。

我想檢查之前的文本字符串是否等於當前的字符串。

如果是這樣,那麼我想把之前的ID號放入一個名爲New ID的新字段(在當前記錄上),而舊的代碼放在一個名爲Deleted codes的新字段中。

基本上我們有重複地址,我們想要合併成一個客戶,但沒有刪除任何數據。

新碼公式= IF(M20 M19 =,O19,A20) 刪除碼公式= IF(N20 = 020 「」,N20)

這是可能在SQL辦?

+0

您正在使用什麼版本的SQL Server? – 2014-09-26 08:09:12

+0

對不起,即使使用SQL SSMS 2008 – 2014-09-26 08:12:52

+0

如果我們能夠看到表格的結構,這將有所幫助。我會建議使用dense_rank()而不是row_number()ie:選擇dense_rank()over(按文本字符串排序)作爲id,* from Table1 – Oliver 2014-09-26 13:39:27

回答

1
;WITH MyCTE AS 
(
    SELECT *, 
      ROW_NUMBER()OVER (ORDER BY TextString) AS rn 
    FROM Table1 
) 
SELECT T1.TextString AS T1String, 
     T2.TextString AS T2String, 
     CASE WHEN T1.TextString = T2.TextString THEN T1.ID ELSE '' END AS NewCode, 
     CASE WHEN T1.TextString = T2.TextString THEN T2.ID ELSE '' END AS OldCode 
FROM MyCTE T1 
     LEFT JOIN MyCTE T2 
      ON T1.rn = T2.rn+1 

SQL Fiddle Demo

+0

謝謝,你能解釋它是如何工作的,只是我明白了。 – 2014-09-26 08:21:14

+0

我給每一行增加一個數字,我創建一個cte來保存它們。然後我使用id和以前的id加入cte。然後我能夠檢查當前字符串與前一個。 – 2014-09-26 08:24:00

+0

在SQL 2012和更高版本中,您可以使用新的LAG功能。 http://msdn.microsoft.com/en-us/library/hh231256.aspx – 2014-09-26 08:25:16

相關問題