Запрос Visual FoxPro добавить итог

У меня есть следующий простой запрос, который просто суммирует 1 или несколько строк. На основе уникальной ссылки.

Что я хочу сделать, так это добавить общий столбец к результатам jobcharge.nAccrInv, сгруппированным по JobRef.

I.e

Job_Ref / Имя / Продажи / Итого

123 / НДС / 10,0

123 / ДОЛГ / 10,0

123/ГХК/10,0/30,0

ВЫБЕРИТЕ ОТЛИЧНЫЙ ;

Job.cJobRef AS JobRef,;
Job.cName AS Customer_Name, ;
Job.cJobType AS JobType, ;
Job.cJobMode AS JobMode, ;
Job.cOrigin AS Org,;
Job.cDestination AS Dest,;
Job.cOwner AS Owner,;
jobcharge.cInvoiceDescr as [Invoice_Desc], ;
jobcharge.nAccrInv as [Accrued_Costs], ;
jobcharge.nCostInv as [Actual_Costs], ;
jobcharge.nSaleInv as [Sales], ;
( SELECT SUM(jobcharge.nAccrInv) AS SalesTotals FROM jobcharge WHERE NJOBID =3524); FROM job;INNER JOIN jobcharge ON job.nJob_Id = jobcharge.nJobId; WHERE job.cJobRef= "RSJC00001" AND job.cOwner = 'DBQ'

Спасибо Росс


person Ross    schedule 25.10.2011    source источник


Ответы (1)


(Слишком много, чтобы помещать в поле для комментариев)... отвечу позже.

Какова цель вашего nJobID = 3524, вас интересует только одна работа? Если это так, ваш запрос даст вам общее количество только для задания 3525, независимо от всех заданий, возвращенных из предложения WHERE задания.

Я поработаю над запросом, но вы не хотите DISTINCT.

Кроме того, у вас есть только jobCharge.nArrcInv, .nCostInv, .nSaleInv, но позже вы используете SUM( jobcharge.nAccrInv )... Ваше НАМЕРЕНИЕ получить сумму начисленных затрат, сумму фактических затрат, сумму продаж за задание описание??? включая другое содержимое заголовка задания?

Похоже, вам нужны обе суммы по отдельным подгруппам для каждого типа работы ПЛЮС общая сумма всех продаж по всей работе... может быть, вам нужно вот это...

SELECT 
      Job.cJobRef AS JobRef,;
      Job.cName AS Customer_Name, ;
      Job.cJobType AS JobType, ;
      Job.cJobMode AS JobMode, ;
      Job.cOrigin AS Org,;
      Job.cDestination AS Dest,;
      Job.cOwner AS Owner,;
      JCSubTotals.Invoice_Desc,;
      JCSubTotals.Accrued_PerDesc,;
      JCSubTotals.Actual_PerDesc,;
      JCSubTotals.Sales_PerDesc,;
      JCFinalTotals.Total_Accrued,;
      JCFinalTotals.Total_Actual,;
      JCFinalTotals.Total_Sales;
   from ;
      ( select jc.nJobID,;
               jc.cInvoiceDescr as Invoice_Desc, ;
               sum( jc.nAccrInv ) as Accrued_PerDesc, ;
               sum( jc.nCostInv ) as Actual_PerDesc, ;
               sum( jc.nSaleInv ) as Sales_PerDesc ;
            from ;
               JobCharge jc;
            where ;
               jc.nJobID = 3524 ;
            group by ;
               jc.nJobID,;
               jc.cInvoiceDescr ) JCSubtotals ;
      JOIN ;
         ( select jc.nJobID,;
                  sum( jc.nAccrInv ) as Total_Accrued, ;
                  sum( jc.nCostInv ) as Total_Actual, ;
                  sum( jc.nSaleInv ) as Total_Sales ;
               from ;
                  JobCharge jc;
               where ;
                  jc.nJobID = 3524 ;
               group by ;
                  jc.nJobID ) JCFinalTotals ;
            ON JCSubtotals.nJobID = JCFinalTotals.nJobID ;
      JOIN Job ;
         on JCSubtotals.nJobID = Job.nID;

На самом деле я дал вам еще несколько столбцов для отображения в каждой строке, ее Итоги по описанию работы И ИТОГО по сравнению со всей работой (для начисленных, фактических и продаж). Вы всегда можете игнорировать столбцы, которые вам не нужны, но это дает вам представление о том, что, как я думаю, вы хотите.

Кроме того, я предполагаю, что последнее соединение с таблицей «JOB» (поскольку не предоставлено), его столбец первичного ключа представляет собой просто «nID» вместо «nJob_ID» (в качестве внешнего ключа к таблице jobCharge).

Если бы вы хотели, чтобы эти результаты охватывали весь набор заданий, я бы просто удалил соответствующие предложения «WHERE» из запросов JobCharge.

person DRapp    schedule 25.10.2011
comment
@Ross, пересмотренный ответ, включающий запрос из предполагаемых желаемых результатов - person DRapp; 25.10.2011