В случае, когда запрос может возвращать более одного значения? Просто добавьте дополнительную сортировку по.
Итак, общий подзапрос может заключаться в получении последнего счета. Таким образом, у вас может быть:
select ID, CompanyName,
(SELECT TOP 1 InvoiceDate from tblInvoice
where tblInvoice.CustomerID = tblCompany.ID
Order by InvoiceDate DESC)
As LastInvoiceDate
From tblCustomers
Теперь вышеуказанное может работать в течение некоторого времени, но затем оно взорвется, поскольку у вас может быть два счета за один и тот же день!
Итак, все вы необходимо добавить это дополнительное предложение order by - скажем, на PK дочерней таблицы, например:
Order by InvoiceDate DESC,ID DESC)
Таким образом, верхний 1 будет учитывать добавленные вами «дополнительные» столбцы порядка и, следовательно, только когда-либо возвращать одна строка - даже если есть несколько значений, которые соответствуют верхнему столбцу 1.
Я полагаю, что в приведенном выше примере мы могли бы забыть invoiceDate и всегда брать самый верхний последний идентификатор автонумерации, но для многих запросов вы не всегда можете быть уверены - возможно, нам нужна последняя самая дорогая сумма счета. И снова, если максимальное значение (вверху) было одинаковым для двух больших сумм счета, тогда снова могут быть возвращены две строки. Итак, просто добавьте дополнительное предложение ORDER BY со вторым столбцом, который упорядочивает данные. Таким образом, верхняя 1 будет вытягивать только первое значение. Ваш пример верхней группы является таким примером. Просто добавьте дополнительный заказ по «ID» или какому-либо другому столбцу идентификатора автоматического номера.