Contar numero de filas y operarlo

Buen día comunidad

tengo una consulta

Tengo unas facturas con sus detalles, hay unas facturas que tienen solo 1 detalle y otras que tienen 2 o mas por lo cual yo necesito para efectos de un reporte tomar ese numero de detalles y operarlo en una formula.

en mi caso es que tengo que dividir una cantidad “X” por el numero de detalles (filas) que tenga la factura

image

asi tengo el query, agradeceria mucho su ayuda.

Saludos!

Hola @Mauricio_Ayau

Podrías intentar asignando el resultado del COUNT a una variable y esta después utiizarla donde la necesites.

DECLARE @NumFilas INT

@NumFilas=(SELECT COUNT (FacProve.DocNum) FROM.....) 


SELECT SUM( CASE 
WHEN FacProve.WTSum <> 0 THEN FacDesc.GTotal + FacProve.TotalExpns - (FacProve.WTSum / @NumFilas))...

Saludos, ojalá te sirva de algo :slight_smile:

4 Me gusta

deberías indicarnos que resultado esperas para poder ayudarte.

Saludos,

1 me gusta

Buenas tardes @Mauricio_Ayau
Otra opción seria realizar el count dentro de la division, algo asi.

Select Sum(CASE WHEN FacProve.WTSum <> 0
                THEN FacDesc.GTotal + FacProve.TotalExpns - (FacProve.WTSsum / COUNT(FacProve.DocNum))
                ELSE FacDesc.GTotal + FacProve.totalExpns END
FROM...

Espero y te sirva, Saludos.

1 me gusta

El resultado que espero es que donde esta ese 3 me ponga el numero de detalles que tiene la factura
asi como ahi puse 3 y en las facturas que tienen 3 detalles me sale bien el total pero en las que tienen un numero diferente a 3 de detalles sale mal

por lo que necesito capturar el numero de detalles que tiene cada factura y operarlos en ese espacio depues de la division

Capture

Gracias compañero pero me tira error :frowning:
porque el COUNT(FacProve.DocNum) despues de la division devuelve varios valores y no puede dividirlo entre varios :frowning:

me sale esto
Msg 8120, Level 16, State 1, Line 9
Column ‘REMISA2017.opch.DocDate’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

:frowning:

Buen dia @Mauricio_Ayau, el msg es porque tienes que agregar los valores(Los campos para la formula) a un GROUP BY cuando realizas una suma, realizando eso no debería salir ese msg.

mi query esta asi le pongo sum y me da error :confused: puro novato ando

SELECT

 FacProve.DocNum
,FacProve.DocDate as fechaContabilizacion
,FacProve.DocDueDate as fechaVencimiento
,FacProve.CardCode + '  ' + FacProve.CardName as Proveedor
,FacProve.NumAtCard as numeroReferencia
,FacDesc.Dscription as descripcion 
,DATEDIFF(DAY, FacProve.DocDate, SYSDATETIME()) AS dias
,FacProve.PaidToDate pagadoAlaFecha

,case when FacProve.WTSum <> 0
 then FacDesc.GTotal + FacProve.TotalExpns - (FacProve.WTSum /   COUNT (FacProve.DocNum)  )
 else FacDesc.GTotal + FacProve.TotalExpns END as totaline


 
from "REMISA2017".opch FacProve
INNER JOIN "REMISA2017".PCH1 FacDesc on FacProve.DocEntry = FacDesc.DocEntry
LEFT JOIN "REMISA2017".OVPM Pagos ON FacProve."ReceiptNum" = Pagos."DocEntry"

WHERE 
FacProve.CardName = 'JUAN CARLOS LIMA OSCAL' 
--FacProve.CardName = 'ESTACION DE SERVICIO LAS MAJADAS' 
AND FacProve.PaidToDate <= 0
--and FacProve.DocDueDate <= @FechaVencimiento

ORDER BY DocNum

Gracias por tu ayuda

Antes del Order By agrega el GROUP BY con los campos de las columnas que utilizas, como el ej que diste ahorita, “Column ‘REMISA2017.opch.DocDate’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.”, el campo que puse en negritas, cada que lo ejecutes te dirá cual falta.

pero no puedo agruparlas por todos los campos que tengo arriba :confused:

es facil, solo reemplaza ese “3” por una subconsulta:

THEN FacDesc.GTotal + FacProve.TotalExpns - (FacProve.WTSsum / (select count(*) from PCH1 where PCH1.DocEntry = FacProve.DocEntry))

Saludos,

:exclamation: @Mauricio_Ayau, lee Cómo usar el foro de Consultoria-SAP, si continúas pasando código como capturas, y respondiendo mensajes seguidos (en vez de responder todos los mensajes en una respuesta, o editar tu respuesta para poner más contenido), podrías ser suspendido.

Recuerda que esta comunidad es de todos, si todos la usamos mal, el foro podría cerrar. :frowning:

No es necesario que respondas a este mensaje.

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.