Получение данных из двух таблиц с помощью объединения и выполнения Count и GroupBy - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь получить данные из двух таблиц SaleInvoices и Customers.Оба связаны с внешним ключом CustomerId.Я пытаюсь заставить клиентов повторить подсчет записей и сгруппировать их.Но это порождает следующую ошибку.

USE iBusinessFlex;
SELECT SaleInvoices.InvoiceID,
       SaleInvoices.CustomerID,
       Customers.ContactName,
       Customers.CNIC,
       Customers.City,
       Customers.CellNumber,
       Customers.CompanyName,
       COUNT(*)
FROM SaleInvoices
     INNER JOIN Customers ON SaleInvoices.CustomerID = Customers.CustomerId
WHERE SaleInvoices.UpdatedDate >= '2017-01-02 16:53:53.253'
  AND SaleInvoices.UpdatedDate <= '2019-01-02 16:53:53.253'
GROUP BY Customers.ContactName;

Ошибка, которую я получаю:

Столбец «SaleInvoices.InvoiceID» недопустим в списке выбора, поскольку он не содержится ни в агрегатефункция или предложение GROUP BY.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Версия с группировкой по всем столбцам в SELECT:

Select SaleInvoices.InvoiceID
      ,SaleInvoices.CustomerID
      ,Customers.ContactName
      ,Customers.CNIC
      ,Customers.City
      ,Customers.CellNumber
      ,Customers.CompanyName
      ,Count(*)
 From SaleInvoices 
 INNER JOIN Customers 
 ON SaleInvoices.CustomerID=Customers.CustomerId 
 Where SaleInvoices.UpdatedDate >= '2017-01-02 16:53:53.253' 
 AND SaleInvoices.UpdatedDate<= '2019-01-02 16:53:53.253' 
 GROUP BY SaleInvoices.InvoiceID
      ,SaleInvoices.CustomerID
      ,Customers.ContactName
      ,Customers.CNIC
      ,Customers.City
      ,Customers.CellNumber
      ,Customers.CompanyName

Версия с удалением столбцов из выбора, без изменения группы на:

Select Customers.ContactName
      ,Count(*)
 From SaleInvoices 
 INNER JOIN Customers 
 ON SaleInvoices.CustomerID=Customers.CustomerId 
 Where SaleInvoices.UpdatedDate >= '2017-01-02 16:53:53.253' 
 AND SaleInvoices.UpdatedDate<= '2019-01-02 16:53:53.253' 
 GROUP BY Customers.ContactName

Другим способом будетиспользовать агрегатные функции, такие как MIN (), MAX (), ... во всех столбцах выбора:

Select MIN(SaleInvoices.InvoiceID)
      ,MIN(SaleInvoices.CustomerID)
      ,Customers.ContactName
      ,MIN(Customers.CNIC)
      ,MIN(Customers.City)
      ,MIN(Customers.CellNumber)
      ,MIN(Customers.CompanyName)
      ,Count(*)
 From SaleInvoices 
 INNER JOIN Customers 
 ON SaleInvoices.CustomerID=Customers.CustomerId 
 Where SaleInvoices.UpdatedDate >= '2017-01-02 16:53:53.253' 
 AND SaleInvoices.UpdatedDate<= '2019-01-02 16:53:53.253' 
 GROUP BY Customers.ContactName
1 голос
/ 17 апреля 2019

Вы группируете вывод набора результатов по Customers.ContactName, поэтому вы можете иметь только Customers.ContactName в select.
У вас есть два варианта:

1)Либо объедините все столбцы, которые вы поместили в select.
2), либо все они участвовали в предложении group by.

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