Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-12-2018
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Question Sentencia que abarque los meses del año.

Buen día/tarde/noche, según aplique, compañeros del Foro.

Tengo ésta sentencia en MS SQL Server (la versión más reciente, 2018):

Código SQL [-]
select  cac.mcuenta,
    cac.mnombre,
    ISNULL(inicial.saldo, 0) as inicial,
    ISNULL(enero.haber, 0) as enerohaber,
    ISNULL(enero.debe, 0) as enerodebe,
    ISNULL(enero.saldo, 0) as enerosaldo,
    ISNULL(febrero.haber, 0) as febrerohaber,
    ISNULL(febrero.debe, 0) as febrerodebe,
    ISNULL(febrero.saldo, 0) as febrerosaldo,
    ISNULL(marzo.haber, 0) as marzohaber,
    ISNULL(marzo.debe, 0) as marzodebe,
    ISNULL(marzo.saldo, 0) as marzosaldo,
.
.
.
.
.
    ISNULL(diciembre.haber, 0) as diciembrehaber,
    ISNULL(diciembre.debe, 0) as diciembredebe,
    ISNULL(diciembre.saldo, 0) as diciembresaldo
from cacuent as cac
left join (
  select tr.tcuenta, sum(tdebe) as debe, sum(thaber) as haber, sum(tdebe)-sum(thaber) as saldo
  from cdtrans as tr
  where left(tperiod, 4) < 2018
  and tcuenta is not null
  group by tcuenta) as inicial on cac.MCUENTA = inicial.TCUENTA

left join (
  select tr.tcuenta, sum(tdebe) as debe, sum(thaber) as haber, sum(tdebe)-sum(thaber) as saldo
  from cdtrans as tr
  where left(tperiod, 4) = 2018
  and right(tperiod, 2) = 1
  and tcuenta is not null
  group by tcuenta) as enero on cac.MCUENTA = enero.TCUENTA

left join (
  select tr.tcuenta, sum(tdebe) as debe, sum(thaber) as haber, sum(tdebe)-sum(thaber) as saldo
  from cdtrans as tr
  where left(tperiod, 4) = 2018
  and right(tperiod, 2) = 2
  and tcuenta is not null
  group by tcuenta) as febrero on cac.MCUENTA = febrero.TCUENTA

left join (
  select tr.tcuenta, sum(tdebe) as debe, sum(thaber) as haber, sum(tdebe)-sum(thaber) as saldo
  from cdtrans as tr
  where left(tperiod, 4) = 2018
  and right(tperiod, 2) = 3
  and tcuenta is not null
  group by tcuenta) as marzo on cac.MCUENTA = marzo.TCUENTA

.
.
.

left join (
  select tr.tcuenta, sum(tdebe) as debe, sum(thaber) as haber, sum(tdebe)-sum(thaber) as saldo
  from cdtrans as tr
  where left(tperiod, 4) = 2018
  and right(tperiod, 2) = 12
  and tcuenta is not null
  group by tcuenta) as diciembre on cac.MCUENTA = diciembre.TCUENTA

La cual es ineficiente, ya que puede o no tener datos para ciertos meses. El problema no es ése, sino que se darán cuenta que es básicamente el año en curso (where left(tperiod, 4) = 2018) e ir cambiando el mes (and right(tperiod, 2) = 'n'). La duda o pregunta es: ¿podrían orientarme respecto al mejoramiento de la sentencia (no soy muy ducho en SQL Server) o qué faltaría para que el rendimiento se incremente?

De antemano, muchas gracias.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Restar Meses Neeruu Varios 3 17-03-2014 14:35:22
Busqueda x meses gdlrinfo Conexión con bases de datos 1 22-03-2008 01:41:55
Calcular nº de meses Drahcir SQL 3 20-12-2006 19:31:38
Meses desde una fecha dec Trucos 0 01-07-2006 00:37:29
Dias y meses romansiux Varios 5 13-06-2005 17:19:12


La franja horaria es GMT +2. Ahora son las 12:50:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi