2016-09-06 1 views
0

나는이Access에서 상담에 SUM()를 사용

SELECT CREDITOS.Id   AS [Num Credito],   CREDITOS.CLIENTE   AS [Cedula Cliente], 
CLIENTES.NOMBRES   AS [Nombres Cliente],  CLIENTES.APELLIDOS   AS [Apellidos Cliente], 
CREDITOS.FECHA_INICIAL  AS [Fecha Inicial],  CREDITOS.FECHA_FINAL  AS [Fecha Final], 
CREDITOS.CONCEPTO   AS [Concepto],    CREDITOS.VALOR_CREDITO  AS [Valor], 
CREDITOS.NUMERO_CUOTAS  AS [Numero Cuotas],  CREDITOS.MONTO    AS [Monto], 
CREDITOS.PORCENTAJE  AS [Porcentaje],   CREDITOS.UTILIDAD   AS [Utilidad], 
CREDITOS.VALOR_CUOTAS  AS [Valor Cuotas],   CREDITOS.EMPLEADO   AS [Cedula Empleado], 
EMPLEADOS.NOMBRES   AS [Nombres Empleado],  EMPLEADOS.APELLIDOS   AS [Apellidos Empleado], 
Nz(t.Conteo,0)    AS [Días de retraso] 

FROM (CLIENTES 
INNER JOIN (EMPLEADOS 
INNER JOIN (CREDITOS 
LEFT JOIN (
    SELECT CREDITOS.Id AS Cred, Count(RECAUDOS.Id) AS Conteo 
    FROM CREDITOS 
    INNER JOIN RECAUDOS 
    ON(CREDITOS.Id = RECAUDOS.CREDITO 
    AND CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO) 
    GROUP BY CREDITOS.Id 
) AS t 
ON CREDITOS.Id = t.Cred) 
ON EMPLEADOS.ID = CREDITOS.EMPLEADO) 
ON CLIENTES.Id = CREDITOS.CLIENTE) 

가 여기에 모든 것이 내가 원하는 정확히있어 좋아요입니다 Access에서 상담,하지만 지금은 SUM(RECAUDOS.VALOR_RECAUDO) 상담에 하나 더 열을 추가 할 필요가 , 그러나 내가 처음에 추가 할 때 FROM 나는 Your query does not include the specified expression 'Num Credito' as part of an aggregate function 오류가 발생합니다. 나는이 문제가있는 것 같아 ON(CREDITOS.Id = RECAUDOS.CREDITO AND CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO)에 대한 RECAUDOSINNER JOIN하지만이 condicion CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO과 일치하는 테이블에있는 레코드를 계산할 필요가 becaue becaue하지만이 모든 합계가 CREDITOS.Id 인 경우에도 모두 RECAUDOS.VALOR_RECAUDO의 합계가 필요합니다. 정말 간단하게 (SELECT 쿼리 절 JOIN에 중첩) 파생 테이블이 새 집계를 추가 한 다음 t.Conteo했던 것처럼 외부, 주 쿼리에서이를 참조이

+0

select 절의 열이 group by 절에 없으며 선택 목록에 sum()을 추가하여 다음과 같이 요약해야한다는 오류가 없습니다. 그 밖의 모든 것. –

+0

상담이란 무엇입니까? – dbmitch

답변

1

도움이 필요하세요, 제로 :

LEFT JOIN ( 
    SELECT CREDITOS.Id AS Cred, Count(RECAUDOS.Id) AS Conteo, 
      SUM(RECAUDOS.VALOR_RECAUDO) AS new_field 
    FROM CREDITOS INNER JOIN RECAUDOS ON(CREDITOS.Id = RECAUDOS.CREDITO 
    AND CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO) 
    GROUP BY CREDITOS.Id 
) AS t 
+0

이렇게하면 SUM()의 값은 0이고이 조건과 일치하지 않는 다른 모든 행에 대해 'ON (CREDITOS.Id = RECAUDOS.CREDITO AND CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO)'은 'null'이지만 당신의 sugestion은 나에게 아이디어를 줘, 나는 지금 내가 대답을 찾는 방법을 게시 할 것이다 –

+0

다행이다. 해결책이 도움이되었고 해결책을 확인하려면 동의하십시오. 결국에는 데이터 만 알기 때문에 조정이 필요할 수도 있지만 전체적으로 이것이 구조적 쿼리에 필요합니다. – Parfait

0

Parfait의 sugestion이 해결책에 대한 좋은 생각을 내게 던졌습니다. 문제는 서브 쿼리에 있습니다. 가장 정확히는 INNER JOIN... ON(CREDITOS.Id = RECAUDOS.CREDITO AND CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO)입니다. Sum(RECAUDOS.VALOR_RECAUDO) 모든 행에 대해 제로를 줄 수는 없지만 제 생각에는 나에게 줄 것이라고 생각합니다. obobe 이유로 INNER JOIN에있는 조건과 일치하지 않는 모든 값에 대해 ... 이렇게, 나는이 방법으로 JOIN을 떠납니다. INNER JOIN... ON(CREDITOS.Id = RECAUDOS.CREDITO) 그리고 지금 SUM() 그의 직업은 COUNT()이고 문제는 CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO입니다. 카운트 및 내가 그들을 제거하면 COUNT()RECAUDOS (조건없이)의 모든 행을 "계산"하므로이 this을 계산하므로 Count(IIf(CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO, 1, Null))에 대한 Count(RECAUDOS.Id)을 바꿔야합니다. 이제는 모든 것이 레일에 연결됩니다. 최종 문의는 이쪽입니다. :

SELECT 
CREDITOS.Id    AS [Num Credito],   CREDITOS.CLIENTE   AS [Cedula Cliente], 
CLIENTES.NOMBRES   AS [Nombres Cliente],  CLIENTES.APELLIDOS   AS [Apellidos Cliente], 
CREDITOS.FECHA_INICIAL  AS [Fecha Inicial],  CREDITOS.FECHA_FINAL  AS [Fecha Final], 
CREDITOS.CONCEPTO   AS [Concepto],    CREDITOS.VALOR_CREDITO  AS [Valor], 
CREDITOS.NUMERO_CUOTAS  AS [Numero Cuotas],  CREDITOS.MONTO    AS [Monto], 
CREDITOS.PORCENTAJE  AS [Porcentaje],   CREDITOS.UTILIDAD   AS [Utilidad], 
CREDITOS.VALOR_CUOTAS  AS [Valor Cuotas],   CREDITOS.EMPLEADO   AS [Cedula Empleado], 
EMPLEADOS.NOMBRES   AS [Nombres Empleado],  EMPLEADOS.APELLIDOS   AS [Apellidos Empleado], 
t.Conteo     AS [Días de retraso],  t.[Total Recaudo] 

FROM (CLIENTES 
INNER JOIN (EMPLEADOS 
INNER JOIN (CREDITOS 
LEFT JOIN (
    SELECT CREDITOS.Id AS Cred, 
      Nz(Count(IIf(CREDITOS.VALOR_CUOTAS = RECAUDOS.SALDO,1,Null)),0) AS Conteo, 
      Nz(Sum(RECAUDOS.VALOR_RECAUDO),0) AS [Total Recaudo] 
    FROM CREDITOS 
    INNER JOIN RECAUDOS 
    ON(CREDITOS.Id = RECAUDOS.CREDITO) 
    GROUP BY CREDITOS.Id 
) AS t 
ON CREDITOS.Id = t.Cred) 
ON EMPLEADOS.ID = CREDITOS.EMPLEADO) 
ON CLIENTES.Id = CREDITOS.CLIENTE) 
관련 문제