Ошибка возникает из отчета, а не из самого запроса. Записи, полученные в результате показанного выше запроса, содержат два поля с именем [Need Date]
, и отчет не может их дифференцировать. Дайте им разные псевдонимы
SELECT
[UID Only].[Our PN],
[UID Only].[Customer PN],
[UID Only].Description,
[UID Only].[Order #],
[UID Only].[Customer PO],
[UID Only].[Need Date] AS UO_NeedDate,
[Customer Report].[Need Date] AS CR_NeedDate,
[UID Only].[Unique ID]
FROM ([UID Only]
LEFT JOIN [UID, Date] ON [UID Only].[Unique ID] = [UID, Date].[Unique ID])
LEFT JOIN [Customer Report] ON [UID Only].[Unique ID] = [Customer Report].[Unique ID]
WHERE [UID, Date].[Unique ID] Is Null;
Теперь в отчете вы можете обозначить их как UO_NeedDate
и CR_NeedDate
.
Вместо того, чтобы группировать, сделайте это следующим образом ...
select
*
from account a
join (
select
account_id,
row_number() over (order by account_id, id) -
rank() over (order by account_id) as row_num from user
) first on first.account_id = a.id and first.row_num = 0
SELECT (SELECT TOP 1 Name
FROM User
WHERE Account_ID = a.AccountID
ORDER BY UserID) [Name],
a.*
FROM Account a
Есть несколько способов сделать это, здесь быстрый и грязный один.
Select (SELECT TOP 1 U.Name FROM Users U WHERE U.Account_ID = A.ID) AS "Name,
A.*
FROM Account A
Определить «Первый». То, что вы считаете первым, - это совпадение, которое обычно связано с порядком кластеризованного индекса, но на него нельзя полагаться (вы можете придумать примеры, которые его нарушают).
Вы вправе не использовать MAX () или MIN (). Соблазняя, рассмотрите сценарий, в котором ваше имя и фамилия находятся в отдельных полях. Вы можете получить имена из разных записей.
Так как все, что вас действительно волнует, так это то, что вы получаете ровно одну произвольную запись для каждой группы, вы можете просто MIN или MAX поле идентификатора для этой записи, а затем присоединить таблицу к запросу по этому идентификатору. .