Получение ошибки по вложенному запросу - PullRequest
1 голос
/ 18 марта 2012

Я пытаюсь разработать страницу с расписанием на моем веб-сайте, и это моя структура базы данных: enter image description here

Я хочу получить общее количество часов (сумма таблицы TimeSheetWeeks (timeFrom-timeTo)), общие расходы (общая сумма таблицы TimeSheetWeeks) и общее (общая сумма таблицы TimSheetWeeks + общая сумма таблицы compAllow).

Это мой запрос, который я написал, чтобы получить мой результат:

 ;WITH w(tot, tid, eid, fd, td, am, mw) AS
 (
 SELECT   Total = tsw.amount+ca.amount , tsw.[TimeSheetID], [EmployeeID], 
 [FromDate],[ToDate],  tsw.[Amount], SUM(DATEDIFF(MINUTE, [timeFrom],[timeTo] )) 
 FROM
 TimeSheet ts 
 INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID 
  FROM TimeSheetWeeks
  GROUP BY TimeSheetID
  )  tsw ON ts.TimeSheetID = tsw.TimeSheetID INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID
  FROM CompAllow
  GROUP BY TimeSheetID
  )  ca ON ts.TimeSheetID = ca.TimeSheetID INNER JOIN (
     SELECT  timeFrom, timeTo, TimeSheetID
  FROM TimeSheetWeeks
  ) AS tss ON tss.TimeSheetID=ts.TimeSheetID
  WHERE ts.TimeSheetID=6
  Group By tsw.[TimeSheetID], [EmployeeID], [FromDate], [ToDate], tsw.[Amount]
  )
  SELECT tot, tid, eid, fd, td, Amount = am,  totalHrs = RTRIM(mw/60) + ':' + 
  RIGHT('0'+ RTRIM(mw%60),2)
  FROM w;

этот запрос вызывает ошибку:

Столбец ca.amount недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Что здесь не так? Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 18 марта 2012

На столбец ca.amount есть ссылка в w CTE, но он не агрегируется и не включается в предложение GROUP BY:

 ;WITH w(tot, tid, eid, fd, td, am, mw) AS
 (
 SELECT   Total = tsw.amount+<b><i>ca.amount</i></b> , tsw.[TimeSheetID], [EmployeeID], 
 [FromDate],[ToDate],  tsw.[Amount], SUM(DATEDIFF(MINUTE, [timeFrom],[timeTo] )) 
 FROM
 TimeSheet ts 
 INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID 
  FROM TimeSheetWeeks
  GROUP BY TimeSheetID
  )  tsw ON ts.TimeSheetID = tsw.TimeSheetID INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID
  FROM CompAllow
  GROUP BY TimeSheetID
  )  ca ON ts.TimeSheetID = ca.TimeSheetID INNER JOIN (
     SELECT  timeFrom, timeTo, TimeSheetID
  FROM TimeSheetWeeks
  ) AS tss ON tss.TimeSheetID=ts.TimeSheetID
  WHERE ts.TimeSheetID=6
  <b>Group By tsw.[TimeSheetID], [EmployeeID], [FromDate], [ToDate], tsw.[Amount]</b>
  )
  SELECT tot, tid, eid, fd, td, Amount = am,  totalHrs = RTRIM(mw/60) + ':' + 
  RIGHT('0'+ RTRIM(mw%60),2)
  FROM w;

Добавьте его в GROUP BY или измените Total выражение выглядит так:

Total = tsw.amount + SUM(ca.amount)

в зависимости от бизнес-правила для этого запроса.

1 голос
/ 18 марта 2012

В ошибке указана проблема:

SELECT  SUM(amount) amount, TimeSheetID
  FROM CompAllow
  GROUP BY TimeSheetID
  )  ca ...

Я не уверен на 100%, но моя первоначальная рекомендация состоит в том, чтобы убрать "group by" в этом пункте. В лучшем случае это избыточно.

Я бы также рекомендовал пробовать каждый из подпунктов отдельно - убедитесь, что они синтаксически верны, убедитесь, что они возвращают ожидаемые результаты.

ИМХО ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...