回答

收藏

SQL SELECT语句中的增量值

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

这是我想要做的示例代码,下面是结果:
: i8 I- \6 Z. m: q: r   CREATE TABLE dbo.#TempDoc_DocContRoles (DocID int null, FullName varchar(500), DocContRole
3 r3 N2 q9 @/ {' y     varchar (100), NumRole int null); I0 u% `: j% \4 W
   INSERT INTO #TempDoc_DocContRoles(DocID, FullName, DocContRole)1 G/ ]- M5 _# s1 o* F* g5 T! m
      SELECT
$ H, @( K/ p4 J' Z$ `7 |# g          d.DocID, c.FirstName + ' ' + c.LastName as FullName, ldcro.DocContRole
/ a% f! u, l. H2 u      FROM 5 z/ m  z1 Z0 _5 f% _/ m) a
          Document as d
) ^. a* r0 L& D, u& B) b      JOIN
! q& a5 x6 G6 N4 p/ {          dbo.Split( ',','30,31') AS l ON d.DocID = cast(l.[Value] AS int)9 @9 I; d( |2 F3 A0 }3 @
      JOIN 8 p% e$ A7 ]: B! @9 v9 |
          Doc_Contact AS dc ON d.DocID = dc.DocID ; t8 U( f' f' U0 ^+ B
      JOIN 9 H4 a* ^0 K( q$ B' `
          Contact AS c ON dc.P_Number = c.P_Number
! q& z# J# B" e; @3 }% E      LEFT JOIN
# i: t- y' h* L3 i6 [% ?/ Y          lkpDocContactRole AS ldcro ON ldcro.DocContRoleID = dc.DocContRoleID
. {/ u4 F" {  x8 L0 T' D1 z      JOIN : {' Z* C. {) @5 C. s
          dbo.Split( ',','1,2,7') AS r ON ldcro.DocContRoleID = cast(r.[Value] AS int)
: m! G8 i2 w+ O# m- @) |: W
( g% F. J- z+ O* J   CREATE TABLE dbo.#MaxNumRoles (DocID int null, DocContRole varchar(100), NumRole int null)
, F* Y, r1 P1 F1 L( Y* B$ V   INSERT INTO  dbo.#MaxNumRoles (DocID,DocContRole,NumRole)
/ N& i) R$ B$ K+ q0 M7 }1 ?      SELECT / V0 Y' @4 P" x/ A+ ?/ q- N
          DocID, DocContRole, COUNT(*) * ]( O) @* e4 t& |8 l0 D( }
      FROM % b4 \) ~& [) ]+ F! V5 q
          dbo.#TempDoc_DocContRoles   \9 C  `7 @  e. w
      GROUP BY ; F0 Z) V1 u9 m( o6 ~& {5 F" u9 A
          DocID, DocContRole 4 p! |7 S0 d: m6 V# i9 G+ H( b% l
      HAVING : |( H$ z8 [* o* e8 U* U( e' `
          Count(*) > 0% c/ M7 K/ L1 B3 ?* T4 l
   UPDATE td
. ~+ @0 m% v7 i& T   SET td.NumRole = mr.NumRole, s) L& y6 \6 ]  v; H
   FROM dbo.#TempDoc_DocContRoles as td
0 a. a3 v- f5 Y5 A5 ?7 ?6 c: e   INNER JOIN dbo.#MaxNumRoles as mr ON td.DocContRole = mr.docContRole3 j- O' m: M9 w7 o9 R3 H
   SELECT * FROM   dbo.#TempDoc_DocContRoles6 g$ Q# K% P$ b$ r" F
   DROP TABLE dbo.#TempDoc_DocContRoles   ' q% @" ^6 w- Y; J
   DROP TABLE dbo.#MaxNumRoles
. O1 a& x6 R/ u& k. B结果:% k* @* \/ [/ n" x
DocID   FullName    DocContRole NumRole
: D: L- D* T! |' d& e3 v30      Smith    Author         34 _' V7 W: A" {0 H. B! z9 t
30      Daln     Staff          22 K: ^4 A8 ~/ f8 _
30      Dolby    Author         3% D/ P: I5 {( \, O) e5 U
31      Tammy    Author         3
; ]  p+ n" X9 ~30      Barny    Author         35 ?) o7 O; a- y4 B# g/ w
30      Sanny    Res Coor       14 t8 u: K, H. S  p1 N
30      Johny    Staff Rev      2* ]/ V. N6 p, |6 Q& a/ m
我想实际得到:
! R6 L1 i+ F" y, Z# v9 y4 K& j" }' PDocID   FullName    DocContRole NumRole
( E6 R6 ~: _9 j4 p$ a) C$ _30      Smith    Author         1
0 B" K" c4 Y. X; J0 p9 }* G, g30      Daln     Staff          1
5 x% x9 [+ p5 P& ]& |4 ^# a2 S30      Dolby    Author         2
: }  ?3 B$ [+ J- V% W7 D31      Tammy    Author         1
, a9 p5 k6 S' j% c+ \5 M9 Y30      Barny    Author         35 ^5 x2 X' N  s" |
30      Sanny    Res Coor       18 h$ @" V( Y& @$ C8 C1 a
30      Johny    Staff Rev      2
( P9 ]3 \1 n/ ^1 r' y它应该NumRole按docContRole和增加数字docID(例如作者1,作者2等)。目前,它给出了每位作者的总数DocID。- X* x: E  P# H% f* G" x
我的最终目标是获得类似% k+ b0 v( ~2 p" e) n  a
       DocID    Author_1  Author_2 Author_3 Staff_1 Staff_2 ResCoor_11 k3 J, O1 Z2 |( v3 h
30              Smith      Dolby    Barny    Daln    Johny    Sanny 4 _1 _9 y) y* G5 T* {
31              Tammy
: V. p5 o7 K% M2 y% }                6 K3 R3 @8 s1 d3 M  S4 h- @9 x
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则