Извлечение переменной количества строк из базы данных MS Access на основе значений, найденных в другой таблице

Я провел весь день, пытаясь найти решение этой проблемы, но я до сих пор не понимаю:

У меня в одной таблице пользователи следующие поля:

  • Я бы
  • название
  • CITY_ID
  • Гол

и в другом табличном городе два поля:

  • Я бы
  • users_number

Что мне нужно сделать, так это получить верхние строки из таблицы users, как указано в поле users_number в городе, но сначала упорядочить выбранные строки по счету. Количество пользователей намного больше, чем значение, указанное в users_number.

Мой вопрос:

Есть ли возможность выбрать из таблицы пользователей, где критерием является количество строк в таблице города?

благодарю вас

2 ответа

Вот ответ в T-SQL, который может помочь понять его для Access?

declare @users table 
(
    id int primary key clustered
    , name nvarchar(64)
    , city_id int 
    , score int
)
declare @city table (
    id int primary key clustered
    , name nvarchar(64)
    , users_number int
)

insert @city
      select 1, 'San Fran', 2
union select 2, 'NY', 5

insert @users
      select 1, 'Steve Fields', 1, 10
union select 2, 'Sarah Felcher', 1, 20
union select 3, 'Nick Yarnton', 2, 12
union select 4, 'Nigel Yardsman', 2, 12
union select 5, 'Nicki Yakatou', 2, 13
union select 6, 'Nicola Yates', 2, 23
union select 7, 'Steph Freeman', 1, 15
union select 8, 'Ned Yount', 2, 18
union select 9, 'Neil Yorke', 2, 1

select *
from @city c
left outer join 
(
    select id, name, city_id, score
    , ROW_NUMBER() over (partition by city_id order by score desc) r
    from @users
) u
on c.id = u.city_id
where c.users_number >= u.r
order by c.id, u.score desc

Как насчет этого для MS Access:

SELECT t.ID, (
   SELECT Count(ID) 
   FROM users s 
   WHERE s.ID<=t.ID And s.city_id=t.city_id) AS Expr1
FROM users AS t
INNER JOIN City c
ON t.city_id = c.ID
WHERE (
    SELECT Count(ID) 
    FROM users s 
    WHERE s.ID<=t.ID And s.city_id=t.city_id)<=c.users_number
ORDER BY t.ID

Результат:

id  city_id Expr1
1       1       1
2       1       2 
-----------------------------
5       2       1
6       2       2
7       2       3
-----------------------------
9       3       1

Где ID - это идентификатор пользователя, а Expr1 - это заказ.

вход

пользователей

id  name    city_id 
1   a       1   
2   b       1   
3   c       1   
4   d       1   
5   e       2   
6   a       2   
7   b       2   
8   c       2   
9   d       3   
10  e       3

город

id  users_number
1   2
2   3
3   1
Другие вопросы по тегам