Ashok Gadani Ответов: 1

Динамический запрос столбца в SQL


У меня есть такие данные в SQL-таблице..
RouteId     RouteName
1        ROUTE1
1        ROUTE2
1        ROUTE3

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

Хочу выводить как..
Route1     Route2     Route3
ABC1        ABC3      ABC7
ABC2        ABC4      NULL
NULL        ABC5      NULL
NULL        ABC6      NULL

Хотите, чтобы имя маршрута было заголовком, А имя пользователя-данными..
Может ли кто-нибудь из моих друзей предложить мне запрос на это в SQL??

Что я уже пробовал:

Я попробовал PIVOT.. но он дает 7number записей...
Пожалуйста, помогите мне..

Suvendu Shekhar Giri

Доля проблемных запросов

1 Ответов

Рейтинг:
0

ArjunSingh_as

Сначала исправьте RouteID таблицы маршрутов следующим образом.

RouteId	RouteName
1	ROUTE1
2	ROUTE2
3	ROUTE3


Затем используйте следующий запрос для получения результата.

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


Динамический запрос для вышеизложенного

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;



Выход:

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



Предположение:

1. следующее имя таблицы [маршрут]
RouteId     RouteName
1        ROUTE1
1        ROUTE2
1        ROUTE3


2. Следующее Имя Таблицы [RouteData]
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