Sql 我是否需要递归CTE来更新依赖于自身的表?

Sql 我是否需要递归CTE来更新依赖于自身的表?,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我要为这个头衔道歉。我花了很多心思,但没有走得太远 我有一张这样的桌子: +--------------------------------------+--------------------------------------+--------------------------------------+--------------------------------------+--------+ | accountid |

我要为这个头衔道歉。我花了很多心思,但没有走得太远

我有一张这样的桌子:

+--------------------------------------+--------------------------------------+--------------------------------------+--------------------------------------+--------+
|              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 |
+--------------------------------------+--------------------------------------+--------------------------------------+--------------------------------------+--------+
它按递增计数排序

我想用相应的pricelevelid更新所有00000000-0000-0000-0000-000000000000的PriceXXID

例如,对于accountid=36B077D4-E765-4C70-BE18-2ECA871420D3,我希望XXID的价格为F43C47CE-28C6-42E2-8399-92C58ED4BA9D

完成后,我希望删除accountid=36B077D4-E765-4C70-BE18-2ECA871420D3的以下所有记录

换言之,在result I中,我将得到一个带有pricexxxid的AccountID的独特列表,该列表将被分配来自pricelevelid的相应值


非常感谢您的指导。

对于您的第一个案例,请执行

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
编辑

更新


您好:请参见编辑!这可以让您保留Acctid的第一次出现~非常感谢您能帮我验证一下吗?我不确定我将如何验证!验证比如什么?你能给出一个情况并告诉我为什么893F9FD2-43C9-4355-AEFC-08A62BF2B066的计数为3吗?它的计数为3,因为pricelevelid出现了3次,e为SELECT*,行数超过了分区按帐户ID按计数排序,pricelevelid作为mycolumns中的Recenty选择accountid,pricelevelid来自e,其中Recenty=1您的表是否有主键?我会猜到accountid,但如果你可以有重复的,那就不是了。确实没有PK!嗯,这使问题更难解决。这就是为什么我们一开始就有PKs,不是真的。你可以很容易地在你的问题中添加一个你误解了我。好的表设计将有一个明确的主键,最好是一个单一的列。这使得表格上更复杂的操作(如您的问题)变得更容易。
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