[SOLUCIONADO] SQL Server 2012 - PIVOT, error cuando celdas tienen operadores numericos

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1003
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

[SOLUCIONADO] SQL Server 2012 - PIVOT, error cuando celdas tienen operadores numericos

Mensaje por Nagual » Vie Sep 27, 2019 11:24 pm

Saludos a todos
Ya estoy nuevamente dando guerra con otra consulta
Como el titulo dice, es una consulta donde reordeno los resultados para pasar filas a columnas, una de las primeras caracteristicas es que se relaciona una tabla principal, y otra de detalle, y en esta de detalle se tienen algunos tipos de movimientos, y conceptos de esos movimientos, son conceptos de nomina, de la siguiente manera

[Movimiento] [Concepto]
--------------- ------------------------------
Deduccion Credito Infonavit
Deduccion Credito Infonavit Cobro
Estadistica # Años Cumplidos
Estadistica Dias Acumulados
Percepcion Premio de Asistencia
Percepcion Vacaciones

y la idea es ordenarlo de la siguiente manera:

[Personal] [Movimiento-Concepto]
Nombre de la persona Deduccion-Credito Infonavit Deduccion-Credito Infonavit Cobro Estadistica-# Años Cumplidos Estadistica-Dias Acumulados ...

Ya he logrado esa parte, de hecho hay un hilo donde quedo solucionada mi duda anterior sobre el PIVOT

Enlace: [SOLUCIONADO] SQL Server 2012 Pivot con varias columnas, filas repetidas

Ver imagen - Pivot parcial
Las columnas MovConceptoEst e ImporteEst son con las que me estoy peleando...
Imagen

Sin embargo el detalle de esta consulta es como manejar el contenido de ciertas celdas (o columna), ya que dentro del texto de estas, aparecen signos matematicos, y a la hora de ejecutar la consulta, me marca un error, el texto de ciertas celdas es la siguiente, y hasta donde puedo entender, creo que son formulas guardadas en la base de datos del EPR que usamos, y lo que hice fue obtener todos los conceptos de las nominas generadas y agruparlas (Movimiento / Concepto).

[Ajuste Mensual] 1=No 2=Si
[ISR Anual]-
[Acumulado SAE Anual]=
[SAE Mensual Aplicado Durante Año]+

Ver imagen de error
Imagen

Entonces lo que hice fue usar una funcion de sustitucion para quitarle los + - =, y eliminar espacios

REPLACE(REPLACE(REPLACE(REPLACE(DEst.Concepto, ' ', ''), '-', ''), '+', ''), '+', ''))

Y aun me marca un error

Ver imagen de error
Imagen

Y ya no se como manejar esos campos en particular para que pueda agregarlos en el ultimo bloque que corresponde al PIVOT para ese conjunto de datos :?
Vere si en realidad son funciones internas del ERP y las puedo omitir, o si en verdad son conceptos...

Agradezco de antemano la orientacion que me puedan dar :)
Seguire de todas maneras indagando

El codigo lo colgué mediante PastieBin:
Enlace: Pastie.org - Pivot (5d8e7ad1ddf84)
Última edición por Nagual el Jue Oct 10, 2019 4:40 pm, editado 1 vez en total.
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1003
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

Re: SQL Server 2012 - PIVOT, error cuando celdas tienen operadores numericos

Mensaje por Nagual » Jue Oct 10, 2019 4:39 pm

Saludos a todos

Pues nuevamente, experimentando, di con la respuesta...

La cosa era que el total de datos guardados en la tabla de detalle tienen movimientos de "percepcion", "deduccion" y "estadistica", los que parecian formulas o con signos matematicos que me provocaban error eran de tipo estadistica, y no se mostraban en el movimiento del EPR, por lo tanto los descarté, tambien todos los movimientos que fueran 0 en el valor de importe,
por lo tanto me quedo la consulta de la siguiente manera...

Enlace: PasiteBin.com (5d9f3c08d6905)

El resultado que buscaba se ve de esta manera, (no encuentro como reemplazar los NULL por 0 , y eso que ocupo ISNULL(NominaD.Importe,0) :?)
Imagen

pero antes de llegar a ese resultado me estaba peleando con este resultado
Imagen

El detalle es que como hago un filtrado para Deducciones en la tabla de detalle, y luego creo un alias para buscar Percepciones, solo estaba comparando el numero del personal
con la tabla de detalle, pero me habia faltado comparar tambien el numero de personal en el alias (NominaD es la tabla de detalle, "Dper" es un alias a NominaD)
...
inner join NominaD on Nomina.ID = NominaD.ID			
	and Nomina.Mov in ('Finiquito','Liquidacion','Liquidaciones','Nomina','PTU','Aguinaldo')	
	and Nomina.Estatus = 'Concluido'
	and NominaD.Movimiento = 'Deduccion'
	and Nomina.FechaEmision between '2019/01/09' and '2019/30/09'	
inner join NominaD as DPer on Nomina.ID = DPer.ID
	and DPer.Movimiento = 'Percepcion'                 <-- Esto me faltaba
inner join Personal on NominaD.Personal = Personal.Personal
and DPer.Personal = Personal.Personal
...
Pues nuevamente, gracias a todos
esperando que esta pequeña solucion a una de mis necesidades, le sirva a alguien mas
Saludos a todos
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje