Как я могу добавить общую строку в свой код

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть этот код, который у меня есть из системного программного обеспечения магазина, и мне интересно, как я могу добавить общую строку. Я бывший бухгалтер-новичок, который переходит к анализу данных. Я прошел много уроков и продолжаю учиться, но все еще новичок. Предположительно, это база данных программного обеспечения системы магазина, основанная на SQL 2012. Вот мой код, работает нормально, просто нужна общая строка только для последнего столбца:

 Select  ESTIM.DESCRIP
      , ESTIM.PARTNO
      , ESTIM.PRODCODE
      , ESTIM.QTYONHAND
      , ESTIM.QTYONORDER
      , ESTIM.REORDLEVEL
      , ESTIM.STOCKINGCOST
      , ESTIM.QTYONHAND * ESTIM.STOCKINGCOST As "Total Item Value in Stock"
From    ESTIM
Where   ((ESTIM.PRODCODE Like [ENTER PRODUCT CODE:]))
Order By ESTIM.PARTNO;
 

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

1. Вычислите ее в другом аналогичном запросе и UNION в исходном, но помните, что порядок сортировки является случайным, поэтому вам придется добавить поле, равное 0 для всех записей и 1 для общего количества, и упорядочить по этому. Но в целом, такого рода представление лучше оставить для генераторов отчетов, таких как SSRS или Crystal и т. Д.

Ответ №1:

Есть несколько способов получить общую сумму из этого запроса.

Вы можете использовать запрос ОБЪЕДИНЕНИЯ, чтобы получить новую строку только с общим значением, а все остальные поля равны нулю:

  SELECT 'TOTAL', NULL, NULL, NULL, NULL, NULL, NULL, SUM(ESTIM.QTYONHAND * ESTIM.STOCKINGCOST) FROM ESTIM  WHERE ((ESTIM.PRODCODE Like [ENTER PRODUCT CODE:]));
 

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

 Select  ESTIM.DESCRIP
      , ESTIM.PARTNO
      , ESTIM.PRODCODE
      , ESTIM.QTYONHAND
      , ESTIM.QTYONORDER
      , ESTIM.REORDLEVEL
      , ESTIM.STOCKINGCOST
      , ESTIM.QTYONHAND * ESTIM.STOCKINGCOST As "Total Item Value in Stock"
      SUM(ESTIM.QTYONHAND * ESTIM.STOCKINGCOST) OVER (PARTITION BY 1) as "Total of Total Item Value"
From    ESTIM
Where   ((ESTIM.PRODCODE Like [ENTER PRODUCT CODE:]))
Order By ESTIM.PARTNO;
 

Вы также могли бы … возможно… будьте хитры GROUP BY <fields> WITH ROLLUP , но я думаю, что это добавит больше записей в выходные данные, чем вы ищете.