2014-05-20 21 views
2

我需要爲標題道歉。我花了很多心思,但沒有太多。我是否需要遞歸CTE來更新依賴於自身的表?

我有一個表,看起來像這樣:

+--------------------------------------+--------------------------------------+--------------------------------------+--------------------------------------+--------+ 
|    accountid    |    pricexxxxxid    |    accountid    |    pricelevelid    | counts | 
+--------------------------------------+--------------------------------------+--------------------------------------+--------------------------------------+--------+ 
| 36B077D4-E765-4C70-BE18-2ECA871420D3 | 00000000-0000-0000-0000-000000000000 | 36B077D4-E765-4C70-BE18-2ECA871420D3 | F43C47CE-28C6-42E2-8399-92C58ED4BA9D |  1 | 
| EBC18CBC-2D2E-44CB-B36A-0ADE9E2BDE9F | 00000000-0000-0000-0000-000000000000 | EBC18CBC-2D2E-44CB-B36A-0ADE9E2BDE9F | 3BEEA9D3-F26B-47E4-88FA-A2AA366980ED |  1 | 
| 8DC8D0FC-3138-425A-A922-2F0CAC57E887 | 00000000-0000-0000-0000-000000000000 | 8DC8D0FC-3138-425A-A922-2F0CAC57E887 | F1B8AD5D-B008-4C3F-94A0-AD3F90C777D7 |  1 | 
| 8F908A92-1327-4655-BAE4-C890D971A554 | 00000000-0000-0000-0000-000000000000 | 8F908A92-1327-4655-BAE4-C890D971A554 | 2E0EC67E-5F8F-4305-932E-BBF8DF83DBEC |  1 | 
| 37221AAC-B885-4002-B7D9-591F8C14D019 | 00000000-0000-0000-0000-000000000000 | 37221AAC-B885-4002-B7D9-591F8C14D019 | F4A2A0CA-FDFF-4C21-AE92-D4583DC18DED |  1 | 
| 66F406B4-0D9B-40B8-9A23-119EE74B00B7 | 00000000-0000-0000-0000-000000000000 | 66F406B4-0D9B-40B8-9A23-119EE74B00B7 | 204B8570-CEBA-4C72-9B72-8B9B14AF625E |  2 | 
| D0168CE3-479E-439E-967C-4FF0D701291A | 00000000-0000-0000-0000-000000000000 | D0168CE3-479E-439E-967C-4FF0D701291A | 204B8570-CEBA-4C72-9B72-8B9B14AF625E |  2 | 
| 57E5F6E5-0A8A-4E54-B793-2F6493DC1EA3 | 00000000-0000-0000-0000-000000000000 | 57E5F6E5-0A8A-4E54-B793-2F6493DC1EA3 | 893F9FD2-43C9-4355-AEFC-08A62BF2B066 |  3 | 
+--------------------------------------+--------------------------------------+--------------------------------------+--------------------------------------+--------+ 

它由升數排序。

我想更新全部爲00000000-0000-0000-0000-000000000000的pricexxxxids及其相應的pricelevelid。

例如,對於ACCOUNTID = 36B077D4-E765-4C70-BE18-2ECA871420D3我想pricexxxxid爲F43C47CE-28C6-42E2-8399-92C58ED4BA9D。

做到這一點後,我想所有的記錄,在此之後一個地方ACCOUNTID = 36B077D4-E765-4C70-BE18-2ECA871420D3被刪除。

結果中的另一個單詞將以pricexxxxid與pricelevelid中的相應值分配一個明確的accountids列表。

非常感謝您的指導。

+0

貴的表有一個主鍵?我會猜到'accountid',但如果你可以有重複的話,那不是。 – Turophile

+0

確實沒有PK! –

+0

那麼,這會讓問題變得更難。這就是爲什麼我們擁有PK的原因。 – Turophile

回答

2

爲您的第一個案例做!

update table 
set pricexxxxids=pricelevelid. 

如果我正確理解你的第二種情況:(刪除重複/選擇不同)?

delete from 
(
select *,rn=row_number()over(partition by accountid order by accountid) from table 
)x 
where rn>1 


--select distinct * from table 

編輯

select * from 
(
select *,rn=row_number()over(partition by accountid order by accountid) from table 
)x 
where x.rn=1 

更新

SELECT accountid,pricelevelid FROM 
    (
    (SELECT *, 
    Row_number() OVER (partition BY accountid ORDER BY counts, pricelevelid) AS Recency 
    FROM table 
    )x 
    WHERE x.Recency = 1 
+0

嗨:)見編輯!這可以讓你保持Acctid〜 –

+0

的第一次發生,非常感謝你能幫我驗證一下嗎?我不知道我會如何驗證! –

+0

Validate?像什麼?你能給情況,並告訴我,爲什麼'893F9FD2-43C9-4355-AEFC-08A62BF2B066'有'數= 3' –