Click here to Skip to main content
15,893,814 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
I have Data in SQL Table Like this..
SQL
RouteId     RouteName
1        ROUTE1
1        ROUTE2
1        ROUTE3

SQL
Id     UserName    Area    City    RouteId
1        ABC1      XYZ1    PQR1    1
2        ABC2      XYZ2    PQR1    1
3        ABC3      XYZ3    PQR1    2
4        ABC4      XYZ4    PQR2    2
5        ABC5      XYZ5    PQR2    2
6        ABC6      XYZ6    PQR3    2
7        ABC7      XYZ7    PQR4    3

Want output as..
SQL
Route1     Route2     Route3
ABC1        ABC3      ABC7
ABC2        ABC4      NULL
NULL        ABC5      NULL
NULL        ABC6      NULL

Want Route Name as Header and UserName as Data..
Can any one of my friend Suggest me a Query for this in SQL??

What I have tried:

I tried PIVOT.. but it gives 7number of Records...
Please help me..
Posted
Updated 15-Nov-16 21:18pm
Comments
Suvendu Shekhar Giri 14-Nov-16 3:35am    
Share the problematic query

1 solution

First Correct RouteID of Route Table as follows.
C#
RouteId	RouteName
1	ROUTE1
2	ROUTE2
3	ROUTE3


Then use following Query to obtain Result.

SELECT ROUTE1,ROUTE2,ROUTE3
FROM (
    
        select rd.*,r.RouteName from [RouteData] rd inner join [route] r on rd.[RouteId]=r.[RouteId]
) as s
PIVOT
(
    max(UserName)
    FOR RouteName IN (ROUTE1,ROUTE2,ROUTE3)
)AS pvt


Dynamic Query for above

SQL
DECLARE @cols AS nvarchar(max), @query AS nvarchar(max);

SELECT @cols = STUFF(
					(
						SELECT ','+[RouteName]
						FROM [route]
						ORDER BY [RouteId]
						FOR XML PATH(''), TYPE
					).value( '.', 'NVARCHAR(MAX)' ), 1, 1, '');

PRINT @cols;

SET @query = N'SELECT '+@cols+N' from 
             (
               select rd.*,r.RouteName from [RouteData] rd inner join [route] r on rd.[RouteId]=r.[RouteId]
  
            ) x
            pivot 
            (
                max(UserName)
                for RouteName in ('+@cols+N')
            ) p ';

EXEC sp_executesql @query;



Output:

C++
ROUTE1	ROUTE2	ROUTE3
ABC1	NULL	NULL
ABC2	NULL	NULL
NULL	ABC3	NULL
NULL	ABC4	NULL
NULL	ABC5	NULL
NULL	ABC6	NULL
NULL	NULL	ABC7



Assumption:

1. Following Table Name [route]
RouteId     RouteName
1        ROUTE1
1        ROUTE2
1        ROUTE3


2. Following Table Name [RouteData]
C#
Id     UserName    Area    City    RouteId
1        ABC1      XYZ1    PQR1    1
2        ABC2      XYZ2    PQR1    1
3        ABC3      XYZ3    PQR1    2
4        ABC4      XYZ4    PQR2    2
5        ABC5      XYZ5    PQR2    2
6        ABC6      XYZ6    PQR3    2
7        ABC7      XYZ7    PQR4    3
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900