Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como armar una Linea de detalle en funcion a varios registros (https://www.clubdelphi.com/foros/showthread.php?t=72902)

oscarac 17-03-2011 22:37:48

Como armar una Linea de detalle en funcion a varios registros
 
buenos dias quiza el titulo no sea muy descriptivo pero me gustaria saber si alguien puede ayudarme con este tema

imaginemos que tengo esta informacion en una tabla (Base de datos MS Sql Server)

Cita:

001...631010.....1000.00....D.... V
001...631015........10.00....D.... N
001...401010.......190.00...D.... I
001...421010......1200.00...H.... P
me gustaria hacer un query que me muestre lo siguiente
Cita:

001.....1000.00.....10.00....190.00......1200.00
.............V..............N ..........I..............P
para quienes saben contabilidad (y estan en Peru.) es el armado de un registro de compras

oscarac 17-03-2011 22:51:51

lo he solucionado de la siguiente manera

Código SQL [-]
Select M.Voucher, M.Documento, M.Anexo,
SUM(iif (M.AFC = 'V', M.n_imp,0)) As Valor,
SUM(iif (M.AFC = 'I', M.n_imp,0)) As IGV,
SUM(iif (M.AFC = 'N', M.n_imp,0)) As NoAfecto,
SUM(iif (M.AFC = 'P', M.n_imp,0)) As Total
 from tblmovimientocontable M 
where M.Periodo = '200912' and M.Libro = '22'
group by M.Voucher, M.documento, m.ANEXO

pero tengo un problema, me salen 2 lineas porque el campo ANEXO no se repite en todos los registros solo cuando AFC = P
me gustaria que se pudiera agrupar en una sola linea

Caral 17-03-2011 22:58:24

Hola
Tal vez asi:
Código SQL [-]
Select DISTINCT M.Anexo, M.Voucher, M.Documento, 
SUM(iif (M.AFC = 'V', M.n_imp,0)) As Valor,
SUM(iif (M.AFC = 'I', M.n_imp,0)) As IGV,
SUM(iif (M.AFC = 'N', M.n_imp,0)) As NoAfecto,
SUM(iif (M.AFC = 'P', M.n_imp,0)) As Total
 from tblmovimientocontable M 
where M.Periodo = '200912' and M.Libro = '22'
group by M.Voucher, M.documento, m.ANEXO
Saludos

oscarac 17-03-2011 23:02:42

Cita:

Empezado por Caral (Mensaje 393975)
Hola
Tal vez asi:

Código SQL [-]
Select DISTINCT M.Anexo, M.Voucher, M.Documento,
SUM(iif (M.AFC = 'V', M.n_imp,0)) As Valor,
SUM(iif (M.AFC = 'I', M.n_imp,0)) As IGV,
SUM(iif (M.AFC = 'N', M.n_imp,0)) As NoAfecto,
SUM(iif (M.AFC = 'P', M.n_imp,0)) As Total
from tblmovimientocontable M
where M.Periodo = '200912' and M.Libro = '22'
group by M.Voucher, M.documento, m.ANEXO



Saludos


Gracias por la pronta respuesta...
haciendolo del modo que me dices, no me "captura" el campo Anexo

Caral 17-03-2011 23:12:12

Hola
DISTINCT hace eso, distingue, hace que se cree una sola linea en la consulta.
No se que campos son los necesarios ni como los manejas, de hecho en la consulta falta un campo que desconozco.
Se puede usar al igual que usaste Sum con IIF, max, min etc para que la consulta haga lo que se necesita.
Siento no poder ayudar.
Saludos

oscarac 18-03-2011 07:04:07

lo solucione de esta manera
aver si alguien tiene alguna idea mejor

Código SQL [-]
select M.Periodo, M.LIbro, M.Voucher, M.ANEXO Into #Prueba
from tblmovimientocontable M where M.AFC ='P' and 
M.Periodo = :Periodo1 and M.Libro = :Libro1
 
Select M.Periodo, M.Libro, M.Voucher, M.Documento, P.Anexo,
SUM(Case when M.AFC = 'V' then M.n_imp else 0 end ) As Valor,
SUM(Case when M.AFC = 'I' then M.n_imp else 0 end) As IGV,
SUM(Case when M.AFC = 'N' then M.n_imp else 0 end) As NoAfecto,
SUM(case when M.AFC = 'P' then M.n_imp else 0 end ) As Total
 from tblmovimientocontable M 
Left Join #prueba P on M.Periodo = P.Periodo and M.Libro = P.Libro and P.Voucher = M.Voucher
where M.Periodo = :Periodo and M.Libro = :Libro
group by M.Periodo, M.Libro, M.Voucher, M.documento, P.ANEXO


La franja horaria es GMT +2. Ahora son las 11:15:41.

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