SQL - Pivot Dinamico

 
Vista:
sin imagen de perfil
Val: 2
Ha aumentado su posición en 35 puestos en SQL (en relación al último mes)
Gráfica de SQL

Pivot Dinamico

Publicado por ANTONIO (1 intervención) el 03/06/2021 14:24:10
Hola
tengo lo siguiente :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
DECLARE @sprdElements AS NVARCHAR(MAX) --comma separated, delimited, distinct list of product attributes
        ,@tSql AS NVARCHAR(MAX)        --query text
 
        ,@CodViajeros VARCHAR(255);     --specific product name
-- SET @CodViajeros = NULL -- por si queremos filtrar
;WITH dsitSpreadElList AS
(
    SELECT distinct Vehiculo,Hora,CodigoLinea,Sentido,Conductor,FechaPrevista,CodViajeros
    FROM #VIA_CRUCE
)
SELECT @sprdElements = COALESCE(@sprdElements+', ','')+'['+ CAST( CodViajeros AS NVARCHAR(255))+']'
 
FROM dsitSpreadElList;
 
SET @tSql =N';WITH TabExp AS
             (
                SELECT Vehiculo	-- grouping element
					  ,Hora
					  ,CodigoLinea
					  ,Sentido
					  ,Conductor
					  ,FechaPrevista
                      ,CodViajeros		-- spreading element
                      ,[TotalViajeros]		-- aggregating element
                FROM #VIA_CRUCE
	     )
             SELECT Vehiculo,Hora,CodigoLinea,Sentido,Conductor,FechaPrevista,'+@sprdElements +N'
             FROM TabExp
             PIVOT (
                    sum([TotalViajeros])
                    FOR CodViajeros IN (' + @sprdElements +N')
                    ) AS pvt';
 
 EXEC sys.sp_executesql
     @stmt = @tSql

Se puede ver que es un pivotado inusual ya que no se el nº de columnas CodViajeros que voy a extraer pueden ser 10 como 200.
Esto me genera un pivotado por codviajeros y su suma. El problema es que tengo otra tabla con los mismos campos comunes Vehiculo....fecha, eso sin problema y con un CodImportes que es el mismo que codViajeros, eso tampoco sería problema pero con un TotalImportes, es decir a dia de hoy tengo un listado tal que asi :

VEHICULO, HORA..... FECHAPREVISTA y ... cod1 cod2 ...codN
1 12:30 2021.. 10 5 15

pero necesito que al cruce con otra tabla (lo que vendria a ser algo que he llamado un doble pivotaje) saque lo siguiente :
VEHICULO, HORA..... FECHAPREVISTA y ... cod1 cod1 cod2 cod2 ...codN ..codN
1 12:30 2021.. 10 3,5 5 6,3 15 20,78

es decir un codigo repetido , el cual uno contemple el nº de viajeros y otro el importe

He mirado cientos de sitios pero no encuentro una solución. Agradecería ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder