Совокупная Функция SQL для захвата только первого от каждой группы

Ошибка возникает из отчета, а не из самого запроса. Записи, полученные в результате показанного выше запроса, содержат два поля с именем [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.

30
задан Matt 21 April 2009 в 16:14
поделиться

4 ответа

Вместо того, чтобы группировать, сделайте это следующим образом ...

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
25
ответ дан 27 November 2019 в 23:55
поделиться
SELECT (SELECT TOP 1 Name 
        FROM User 
        WHERE Account_ID = a.AccountID 
        ORDER BY UserID) [Name],
       a.*
FROM Account a
1
ответ дан 27 November 2019 в 23:55
поделиться

Есть несколько способов сделать это, здесь быстрый и грязный один.

Select (SELECT TOP 1 U.Name FROM Users U WHERE U.Account_ID = A.ID) AS "Name,
    A.*
FROM Account A
0
ответ дан 27 November 2019 в 23:55
поделиться

Определить «Первый». То, что вы считаете первым, - это совпадение, которое обычно связано с порядком кластеризованного индекса, но на него нельзя полагаться (вы можете придумать примеры, которые его нарушают).

Вы вправе не использовать MAX () или MIN (). Соблазняя, рассмотрите сценарий, в котором ваше имя и фамилия находятся в отдельных полях. Вы можете получить имена из разных записей.

Так как все, что вас действительно волнует, так это то, что вы получаете ровно одну произвольную запись для каждой группы, вы можете просто MIN или MAX поле идентификатора для этой записи, а затем присоединить таблицу к запросу по этому идентификатору. .

0
ответ дан 27 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: