Here is the sample code for what I am trying to do and below is the result:
CREATE TABLE dbo.#TempDoc_DocContRoles (DocID int null, FullName varchar(500), DocContRole
varchar (100), NumRole int null)
INSERT INTO #TempDoc_DocContRoles(DocID, FullName, DocContRole)
SELECT
d.DocID, c.FirstName + ' ' + c.LastName as FullName, ldcro.DocContRole
FROM
Document as d
JOIN
dbo.Split( ',','30,31') AS l ON d.DocID = cast(l.[Value] AS int)
JOIN
Doc_Contact AS dc ON d.DocID = dc.DocID
JOIN
Contact AS c ON dc.P_Number = c.P_Number
LEFT JOIN
lkpDocContactRole AS ldcro ON ldcro.DocContRoleID = dc.DocContRoleID
JOIN
dbo.Split( ',','1,2,7') AS r ON ldcro.DocContRoleID = cast(r.[Value] AS int)
CREATE TABLE dbo.#MaxNumRoles (DocID int null, DocContRole varchar(100), NumRole int null)
INSERT INTO dbo.#MaxNumRoles (DocID,DocContRole,NumRole)
SELECT
DocID, DocContRole, COUNT(*)
FROM
dbo.#TempDoc_DocContRoles
GROUP BY
DocID, DocContRole
HAVING
Count(*) > 0
UPDATE td
SET td.NumRole = mr.NumRole
FROM dbo.#TempDoc_DocContRoles as td
INNER JOIN dbo.#MaxNumRoles as mr ON td.DocContRole = mr.docContRole
SELECT * FROM dbo.#TempDoc_DocContRoles
DROP TABLE dbo.#TempDoc_DocContRoles
DROP TABLE dbo.#MaxNumRoles
Result:
DocID FullName DocContRole NumRole
30 Smith Author 3
30 Daln Staff 2
30 Dolby Author 3
31 Tammy Author 3
30 Barny Author 3
30 Sanny Res Coor 1
30 Johny Staff Rev 2
I would like to actually get:
DocID FullName DocContRole NumRole
30 Smith Author 1
30 Daln Staff 1
30 Dolby Author 2
31 Tammy Author 1
30 Barny Author 3
30 Sanny Res Coor 1
30 Johny Staff Rev 2
It should increment the number in NumRole
per docContRole
and docID
(ex Author 1, Author 2 etc). Currently it gives the total number of authors per DocID
.
My ultimate goal is to get something like
DocID Author_1 Author_2 Author_3 Staff_1 Staff_2 ResCoor_1
30 Smith Dolby Barny Daln Johny Sanny
31 Tammy
You can try this
So dynamic SQL will be smth like that
SQL FIDDLE EXAMPLE