回答

收藏

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

技术问答 技术问答 240 人阅读 | 0 人回复 | 2023-09-12

我需要为这个标题道歉。我花了很多心思,但没有走太远。
' P  M, L- m6 l! U' f1 W我有一个看起来像这样的表:
0 D- _& b( ]5 i( d2 n$ @2 Z! N. M    -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------- |              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 | -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------- 按升序排序: i" ~, e6 @  F9 P
我想用它对应的pricelevelid更新全部为00000000-0000-0000-0000-0000-000000000000的pricexxxxid。
9 M" \$ Y* d! B; P例如,对于accountid = 36B077D4-E765-4C70-BE18-2ECA871420D3,    我希望pricexxxxid为( t" s' P9 u0 W7 o& X2 E6 m
F43C47CE-28C6-42E2-8399-92C58ED4BA9D。
/ N+ t+ y% @. p完成此操作后,我希望删除此帐户后的所有记录accountid = 36B077D4-E765-4C70-BE18-2ECA871420D3
4 J) u" d  }, _" ~4 w
" e  V% F8 I( G# [$ k- b9 g' l换句话说,我会得到一个唯一的价格pricexxxxid的帐户ID并从列表中分配pricelevelid的相应值。
$ N' f+ u0 X: [6 C: S非常感谢您的指导。
) f/ Q' W0 {3 `2 K: O$ D" b% y                                                                ) b' q+ \/ v1 m
    解决方案:                                                                : p. Z3 W  {! ]+ m/ V
                                                                对你的第一种情况!
+ e9 V0 ~* Q7 r2 ~* m  J8 Rupdate tableset pricexxxxids=pricelevelid.如果我正确理解你的第二种情况删除重复项/选择不重复项)?) S9 J7 p" `- S% i1 t* s( i1 {
delete from(select *,rn=row_number()over(partition by accountid order by accountid) from table)xwhere rn>1--select distinct * from table已编辑5 n  w" E% F5 S, T/ }. E' T
select * from(select *,rn=row_number()over(partition by accountid order by accountid) from table)xwhere x.rn=1更新8 n9 H) E9 f- K2 }
        SELECT accountid,pricelevelid FROM  (SELECT *,   Row_number() OVER ( partition BY accountid ORDER BY counts,pricelevelid ) AS Recency     FROM table    )x    WHERE x.Recency =
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则