Возможно ли решить данную задачу с помощью SQL БЕЗ использования рекурсии? Есть две сущности – отделы (deps) и столики (столики). В рамках корпоратива необходимо разместить сотрудников каждого из отделов за отдельным столиком. Сотрудники каждого отдела могут должны быть размещены не более чем за одним столиком. И наоборот: за одним столиком могут сидеть только сотрудники одного отдела. id – идентификатор отдела или столика. qty – количество сотрудников отдела или количество мест за столиком. Пример данных:drop table deps; drop table tables; create table deps (id number, qty number); create table tables (id number, qty number); insert into deps values (1,100); insert into deps values (2,50); insert into deps values (3,40); insert into deps values (4,10); insert into tables values (101,100); insert into tables values (102,100); insert into tables values (103,40); insert into tables values (104,10); Подскажите плз, возможно ли решить данную задачу с помощью SQL БЕЗ использования рекурсии?
Да, данную задачу можно решить с помощью SQL без использования рекурсии. Можно использовать следующий запрос для размещения сотрудников каждого отдела за отдельным столиком:
WITH ranked_deps AS SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMdeps
SELECT id, qty, ROW_NUMBER() OVER (ORDER BY qty) AS rn FROM deps SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMdeps, ranked_tables AS SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMtables
SELECT id, qty, ROW_NUMBER() OVER (ORDER BY qty) AS rn FROM tables SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMtables
SELECT d.id AS dep_id, t.id AS table_id FROM ranked_deps d JOIN ranked_tables t ON d.rn = t.rn
Этот запрос будет размещать сотрудников каждого отдела за отдельным столиком с учетом количества сотрудников в отделе и количества мест за столиком.
Да, данную задачу можно решить с помощью SQL без использования рекурсии. Можно использовать следующий запрос для размещения сотрудников каждого отдела за отдельным столиком:
WITH ranked_deps AS SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMdeps SELECT id,qty,
ROW_NUMBER() OVER (ORDER BY qty) AS rn
FROM deps
SELECTid,qty,ROWN UMBER()OVER(ORDERBYqty)ASrnFROMdeps,
ranked_tables AS SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMtables SELECT id,
qty,
ROW_NUMBER() OVER (ORDER BY qty) AS rn
FROM tables
SELECTid,qty,ROWN UMBER()OVER(ORDERBYqty)ASrnFROMtables SELECT d.id AS dep_id,
t.id AS table_id
FROM ranked_deps d
JOIN ranked_tables t ON d.rn = t.rn
Этот запрос будет размещать сотрудников каждого отдела за отдельным столиком с учетом количества сотрудников в отделе и количества мест за столиком.