Ошибка получения суммы, сгруппированной по имени и номеру счета SQL Server

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня проблема с моим SQL-запросом. Я попытался выполнить два способа

  • С первым запросом я получил нужную сумму, но потерял некоторые описания имен
  • Со вторым я получил описания каждого имени, но получил меньшую сумму.

Контекст: я хочу получить доход, полученный между двумя датами.

Мне нужны следующие столбцы из таблиц

  • Таблица reciboDet , в которой мне нужны столбцы CtaIngreso, ValorUnitReciboDet
  • Таблица CuentaIngreso_A столбца nombrectaingreso, ctaingreso (только для создания объединения)
  • Таблица Recibo столбцов FechaRecibo and ReciboAnulado

Чтобы получить правильные описания имен, мне нужно проверить год поступления, который был в таблице AvpgEnc , но когда я это делаю, сумма теряется.

Первый запрос

 SELECT        
    ReciboDet.CtaIngreso
    , SUM(ReciboDet.ValorUnitReciboDet) AS Total
    , CuentaIngreso_A.NombreCtaIngreso
FROM
    ReciboDet 
    INNER JOIN CuentaIngreso_A 
       ON ReciboDet.CtaIngreso = CuentaIngreso_A.CtaIngreso
WHERE 
    (ReciboDet.NumRecibo IN
        (SELECT  NumRecibo
          FROM   Recibo
          WHERE  (FechaRecibo BETWEEN '01/10/2020' AND '31/10/2020') 
                 AND (ReciboAnulado = 0) 
                 AND (CuentaIngreso_A.Anio = DATEPART(year, FechaRecibo))
         )
     )
GROUP BY 
    ReciboDet.CtaIngreso
    , CuentaIngreso_A.NombreCtaIngreso
ORDER BY 
    CuentaIngreso_A.NombreCtaIngreso
  

Второй запрос

 SELECT
    ReciboDet.CtaIngreso [cuenta],
    sum(ReciboDet.ValorUnitReciboDet) [monto], 
    CuentaIngreso_A.NombreCtaIngreso [descripcion]
FROM 
    ReciboDet
    inner join avpgenc 
        on ReciboDet.NumFactura = AvPgEnc.NumAvPg
    inner join CuentaIngreso_A 
        on ReciboDet.CtaIngreso = CuentaIngreso_A.CtaIngreso
WHERE 
    (ReciboDet.NumRecibo IN
        (SELECT  NumRecibo
         FROM    Recibo
         WHERE   (FechaRecibo BETWEEN '01/10/2020' AND '31/10/2020') 
                 AND (ReciboAnulado = 0)
         )   
     AND (year(AvPgEnc.FechaVenceAvPg) = CuentaIngreso_A.Anio)
    )
GROUP BY 
    ReciboDet.CtaIngreso
    , CuentaIngreso_A.NombreCtaIngreso 
ORDER BY 
    ReciboDet.CtaIngreso
  

Комментарии:

1. Примеры данных и желаемых результатов действительно помогли бы — как и объяснение того, что вы хотите сделать.

2. Также, пожалуйста, переформатируйте ваши запросы, чтобы они читались без горизонтальной прокрутки (например, поместите ключевые слова и отдельные столбцы в отдельную строку).