Problem: Suppose we have a table TMP where we keep the data of Representatives like RepName, NumberOfLead, Date etc. as below
Now we have to show data like below.
Answer: Very easy we can use PIVOT function but it may create a problem when we add new Representative. We have to change our Procedure whena new representative will be add. Don't worry one solution is here we can use PIVOT in dynamic query like below.
CREATETABLE#TMP
(
REPNAMEVARCHAR(100),
NUMBEROFLEADINT,
DATEDATETIME
)
INSERTINTO#TMP
SELECT'DILIP',2,'11/11/2015'
UNIONALL
SELECT'ANIL',4,'11/11/2015'
UNIONALL
SELECT'PARAM',7,'11/11/2015'
UNIONALL
SELECT'DILIP',6,'11/12/2015'
UNIONALL
SELECT'ANIL',3,'11/12/2015'
UNIONALL
SELECT'PARAM',5,'11/12/2015'
SELECT*FROM#TMP
DECLARE@COLSASNVARCHAR(MAX),
@QUERY ASNVARCHAR(MAX);
SET@COLS=STUFF((SELECTDISTINCT','+QUOTENAME(TMP.REPNAME)
FROM#TMPTMP
FORXMLPATH(''),TYPE
).value('.','NVARCHAR(MAX)')
,1,1,'')
SET@QUERY='SELECT DATE, '+@COLS+' FROM
(
SELECT REPNAME
, NUMBEROFLEAD
, DATE
FROM #TMP
) X
PIVOT
(
MAX(NUMBEROFLEAD)
FOR REPNAME IN ('+@COLS+')
) P '
EXECUTE(@QUERY)
DROPTABLE#TMP
This query will return result as above given pic..
Now you can try this with adding new representative as below
SELECT'MANISH',5,'11/12/2015'