|
这是我想要做的示例代码,下面是结果:
: 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
解决方案: |
|