回答

收藏

SQL SELECT语句中的增量值

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

这是我想要做的示例代码,下面是结果:
: c" _! J, M$ O. \' g   CREATE TABLE dbo.#TempDoc_DocContRoles (DocID int null, FullName varchar(500), DocContRole ! x; Y9 x! j0 @1 S+ X& |: m
     varchar (100), NumRole int null)- `+ I$ `' E4 U) y; y
   INSERT INTO #TempDoc_DocContRoles(DocID, FullName, DocContRole)
8 H3 Y$ u, c2 U9 B      SELECT
# A5 f8 ~" k$ T) S# I+ I4 |3 c          d.DocID, c.FirstName + ' ' + c.LastName as FullName, ldcro.DocContRole
7 Z) P; c' T' F  M& R, G      FROM
# @- E: j5 ?; S! t  ?# D          Document as d
6 u# o3 V0 i' K+ [7 a/ X      JOIN
5 H2 r( M6 O8 ^9 ~          dbo.Split( ',','30,31') AS l ON d.DocID = cast(l.[Value] AS int)( ^6 p' I/ x( p  ?0 W. Y( Z& z
      JOIN 1 F, [8 ~! F7 j7 \9 j
          Doc_Contact AS dc ON d.DocID = dc.DocID
4 y6 o  I9 k& }/ o* i      JOIN
1 D, U" O# d! d          Contact AS c ON dc.P_Number = c.P_Number - ^) f: {) B0 _
      LEFT JOIN   C) Q" D* S) {) x, U, q* w
          lkpDocContactRole AS ldcro ON ldcro.DocContRoleID = dc.DocContRoleID & y: |: `. i# p7 u
      JOIN / N3 O2 l  ~+ g8 o! B! H
          dbo.Split( ',','1,2,7') AS r ON ldcro.DocContRoleID = cast(r.[Value] AS int)
& G- K, h* |: w( ]4 j# _/ Z
; Q$ A$ d6 H4 {5 A5 W. ?8 _: [   CREATE TABLE dbo.#MaxNumRoles (DocID int null, DocContRole varchar(100), NumRole int null)
8 N) [9 p  J: P+ t1 V3 R, W, m& P' a   INSERT INTO  dbo.#MaxNumRoles (DocID,DocContRole,NumRole)# x1 h1 O! Q9 [0 e, J4 {. C8 h
      SELECT $ F% C8 C! l) \, }8 Y0 z9 \0 c$ H( O
          DocID, DocContRole, COUNT(*)
7 N5 @$ M) z4 @5 W6 H      FROM 4 n) T. ^" t7 ~2 S0 V- @
          dbo.#TempDoc_DocContRoles , T% S" a8 y. ~8 x. ^8 L; i& u0 s
      GROUP BY
; S8 e2 T  ?, W0 [6 {5 h" p5 b          DocID, DocContRole
* @; K* [" U- J' ?      HAVING 0 \# W/ K" ^$ z1 f/ u
          Count(*) > 08 ^- A; v( Q  Z5 h$ P/ @
   UPDATE td
( U3 I8 H3 _2 I# a+ |   SET td.NumRole = mr.NumRole
7 m9 g% P2 M1 w9 H5 L   FROM dbo.#TempDoc_DocContRoles as td
; B$ Q. x1 D* @: _6 d- Z   INNER JOIN dbo.#MaxNumRoles as mr ON td.DocContRole = mr.docContRole
: T5 [  e: @! B- y5 T# Z! q+ q   SELECT * FROM   dbo.#TempDoc_DocContRoles
8 h3 A+ _4 v' o7 ?( Q2 F! a   DROP TABLE dbo.#TempDoc_DocContRoles   
5 x# k; s7 U" W( R- {7 k   DROP TABLE dbo.#MaxNumRoles: R) b/ N  |* L& g+ j4 {
结果:2 _( t& V' z  a0 j, i1 ?/ K
DocID   FullName    DocContRole NumRole
7 p( Z; _2 b3 E( K  @30      Smith    Author         3
* }7 P% X! o9 u1 o30      Daln     Staff          2% h. u7 Z: i* H  _* F
30      Dolby    Author         3
& i5 p+ D; U" y/ i# G8 @31      Tammy    Author         3/ A8 I# u! _% P2 ]" g
30      Barny    Author         3: s9 q6 N5 V$ o8 K0 U$ W5 I, C- S% h
30      Sanny    Res Coor       1+ F# [8 }" `& B7 J/ g
30      Johny    Staff Rev      2
& W3 @, _$ q) ]$ Y+ B- j4 {" V我想实际得到:
# a: t+ n" s. O& o) g$ @" vDocID   FullName    DocContRole NumRole
; J+ |+ r; u& l+ ^, L% r30      Smith    Author         1! V7 D5 i/ m7 D0 f. `
30      Daln     Staff          1
9 o* O( y; ^/ V$ b& ]# Y30      Dolby    Author         2
- z( d7 V; T5 P$ f. \& I31      Tammy    Author         1
0 O4 v3 S9 Y3 Y/ h0 Y( L; C30      Barny    Author         3
; c; @: D! \( P& l* a30      Sanny    Res Coor       1
; }+ A9 `5 M0 D3 _8 Z6 s2 p30      Johny    Staff Rev      20 u4 H$ I: G0 Q
它应该NumRole按docContRole和增加数字docID(例如作者1,作者2等)。目前,它给出了每位作者的总数DocID。% _9 K. y7 v' e, a6 e
我的最终目标是获得类似
3 j" g# [5 \5 |, d4 t, j       DocID    Author_1  Author_2 Author_3 Staff_1 Staff_2 ResCoor_1
/ i( @% K2 T, k' J* q$ g9 ^; }$ b30              Smith      Dolby    Barny    Daln    Johny    Sanny - ]. b% E; m( f$ L+ I# p. E
31              Tammy
# d( [6 p" {+ i/ B- y               
, _% f1 J3 v6 j; s' |1 b解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则