Member 12905345 Ответов: 1

Как вычислить I столбец, в котором данные находятся из другой таблицы?


У меня есть 2 таблицы tblPayment, которые имеют столбец "Payment"; и tblMonthlyReports, имеющие столбец "Gross".
Я пытаюсь суммировать все платежи в столбце Payment в tblPayment, результат будет отображаться в столбце Gross в tblMonthlyReports. Но я получил сообщение об ошибке сказав
Msg 147, Level 15, State 1, Line 12
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.


Что я уже пробовал:

USE [NEWCMO]
GO

SELECT [Months]
      ,[Patient/Month]
      ,[Gross]
      ,[Abatement]
      ,[Net]
  FROM [dbo].[tblMonthlyReports]
GO

SELECT Payment FROM tblPayment WHERE Payment=(SELECT SUM(Payment) AS Gross FROM tblMonthlyReports);

1 Ответов

Рейтинг:
7

NightWizzard

Если вы используете агрегатные функции, вам всегда нужно добавить GROUP BY положение рассказать SQL-движок, с помощью которого столбце "Значение" следует совокупности (группы) данных. То HAVING предложение может быть использовано для фильтрации результирующих строк, но это не требуется, если не требуется. Ваш запрос должен выглядеть примерно так:

SELECT Months
     , SUM(Payment) AS Gross
  FROM tblMonthlyReports
GROUP BY Months
WHERE Months IS NOT NULL
  AND Payment IS NOT NULL


Это приведет к появлению нескольких записей, каждая из которых показывает сумму платежей за соответствующий месяц (по одной записи за каждый месяц, который встречается в tblMonthlyReports).

..и не забывай о том, что WHERE в противном случае агрегация может остановиться на первом нулевом значении, что приведет к неверным результатам!


Richard Deeming

Вы не можете поставить WHERE пункт после GROUP BY пункт. :)

NightWizzard

Ой...- ты прав! Набирается все быстро и незаметно :о)