Объединить два запроса в один - PullRequest
0 голосов
/ 25 февраля 2020

В доступе - я хотел бы показать ОДИН запрос, который предоставляет пользователю результаты ОБА этих запросов, таким образом, результаты запроса являются State, CountOfSP, CountOfUsers

В настоящее время, чтобы получить информацию, мы запускаем два отдельные запросы

Select State, Count(userID) As CountOfUsers
From SalesData
Group By State
Order By State;

Тогда наш второй запрос

Select [%$##_Alias].State, Count(salesPerson) As CountOfSalesPerson
From 
(
  Select distinct salesPerson, State
  From salesData
) AS [%$##@_Alias]
Group By [%$##@_Alias].State

Есть ли способ доступа sql, чтобы объединить эти два запроса, чтобы я мог получить все данные, которые мне нужны ОДИН запрос?

РЕДАКТИРОВАТЬ
Я попробовал этот синтаксис, но он дает мне сильно завышенные числа и точно такое же количество для CountOfUsers и CountOfSalesPerson

SELECT salesData.State, Count(salesData.userID) AS CountOfUsers, C 
ount(Regioninfo.salesPerson) AS CountOfSalesPerson
FROM salesData 
LEFT JOIN 
(
    Select distinct salesPerson, State
    From salesData
    group by Region, salesPerson
)  AS Regioninfo ON salesData.State = Regioninfo.State
GROUP BY salesData.State
ORDER BY salesData.State;

Ответы [ 3 ]

2 голосов
/ 25 февраля 2020

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

select State, sum(cnt) as CountOfUsers, count(*) as CountOfSalesPerson
from (Select State, salesPerson, Count(*) As cnt
      From SalesData
      Group By State
     ) as s
group by State
order by State;
1 голос
/ 25 февраля 2020

вы можете присоединиться к ним так:

Select State, Count(userID) As CountOfUsers, Count(stateinfo.salesPerson) As CountOfSalesPerson
From SalesData
left join (
  Select salesPerson, State
  From salesData
  group by salesperson, state
) AS stateinfo on salesdata.state = stateinfo.state
Group By Region
Order By Region;

другим способом:

Select State, Count(userID) As CountOfUsers, stateinfo.c As CountOfSalesPerson
From SalesData
left join (
  select count(z) as c, state
  from (
    Select distinct salesPerson as z, State
    From salesData
  ) as x
   group by state
) AS stateinfo on salesdata.state = stateinfo.state
Group By Region, stateinfo.c
Order By Region;
0 голосов
/ 25 февраля 2020
;with t as
(
    Select [%$##_Alias].State, Count(salesPerson) As CountOfSalesPerson
    From 
    (
        Select distinct salesPerson, State
        From salesData
    ) AS [%$##@_Alias]
    Group By [%$##@_Alias].State
)

Select State, Count(userID) As CountOfUsers, t.CountOfSalesPerson
From SalesData s
left join t on t.state = s.state
Group By Region
Order By Region;
...