Pivot Dinamico
Publicado por ANTONIO (1 intervención) el 03/06/2021 14:24:10
Hola
tengo lo siguiente :
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
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


0