MS Access 2010 - первая функция в Access, что это в SQL - PullRequest
1 голос
/ 20 мая 2019

Я запускаю скрипт на сервере SQL из MS Access и не получаю правильные результаты из-за функции FIRST в MS Access

Select ClientID, ClientREF, FIRST(AgentID) AS FirstOFAgentID, FIRST(AgentREF) AS FirstOFAgentREF
From table 1
Right join table2 ON table1 = table2
Left join table 4 ON table1 = table4
Group by ClientID, ClienREF, AgentID, AgentREF

1 Ответ

0 голосов
/ 20 мая 2019

Ваш запрос не имеет смысла. У вас есть FIRST(AgentID), но вы включаете AgentId в GROUP BY. Ваш запрос эквивалентен просто SELECT DISTINCT с вашими столбцами.

Предполагая, что вы действительно хотите первое значение, я легко могу представить себе в SQL Server обе функции с использованием оконных функций. Я предпочитаю условную агрегацию:

select ClientID, ClientREF,
       max(case when seqnum = 1 then AgentID end) AS FirstOFAgentID, F      
       max(case when seqnum = 1 then AgentREF end) AS FirstOFAgentREF
from (select ClientID, ClientREF, AgentID, AgentREF,
             row_number() over (partition by ClientID, ClientREF order by ?) as seqnum
      from table 1 Right join
           table2
           ON table1 = table2 Left join
           table 4
           ON table1 = table4
     ) cc   
group by ClientID, ClienREF;

Второй использует SELECT DISTINCT с FIRST_VALUE(), который предоставляется как оконная функция, но не как функция агрегирования.

...