Try this in L9 (I've set it up in N9):
=LET(
f,FILTER(Database!B2:U88,ISNUMBER(XMATCH(Database!A2:A88,B4:J4))),
t,VSTACK(Database!B1:U1,f),
u,FILTER(t,BYCOL(t,LAMBDA(c,ISNA(XMATCH("No",c))))),
r,TAKE(u,1),
s,DROP(TAKE(u,-1),,1),
v,VSTACK(r,s),
z,TRANSPOSE(FILTER(v,r<>0)),
x,REDUCE(,z,LAMBDA(a,b,IFERROR(VSTACK(a,TEXTSPLIT(b,";")),""))),
q,FILTER(x,LEFT(INDEX(x,,1),4)<>"Room"),
h,HSTACK(DROP(FILTER(x,LEFT(INDEX(x,,1),4)="Room"),,-1),FILTER(x,LEFT(INDEX(x,,1),4)<>"Room")),
a,Database!X4:X14,b,Database!Y4:Y14,
sc_1,BYROW(--INDEX(h,,2),LAMBDA(r,XLOOKUP(r,a,b,""))),
sc_2,BYROW(--INDEX(h,,3),LAMBDA(r,XLOOKUP(r,a,b,""))),
MAP(INDEX(h,,1),sc_1,sc_2,LAMBDA(x,y,z,TEXTJOIN(", ",,x,IFERROR(y,""),IFERROR(z,"")))))
It will handle up to TWO special ROOM conditions. I have replaced ALL commas in Database with semi-colons.
This would place it all in one cell with Wrap Text set for the cell (try in B9):
=LET(
f,FILTER(Database!B2:U88,ISNUMBER(XMATCH(Database!A2:A88,B4:J4))),
t,VSTACK(Database!B1:U1,f),
u,FILTER(t,BYCOL(t,LAMBDA(c,ISNA(XMATCH("No",c))))),
r,TAKE(u,1),
s,DROP(TAKE(u,-1),,1),
v,VSTACK(r,s),
z,TRANSPOSE(FILTER(v,r<>0)),
x,REDUCE(,z,LAMBDA(a,b,IFERROR(VSTACK(a,TEXTSPLIT(b,";")),""))),
q,FILTER(x,LEFT(INDEX(x,,1),4)<>"Room"),
h,HSTACK(DROP(FILTER(x,LEFT(INDEX(x,,1),4)="Room"),,-1),FILTER(x,LEFT(INDEX(x,,1),4)<>"Room")),
a,Database!X4:X14,b,Database!Y4:Y14,
sc_1,BYROW(--INDEX(h,,2),LAMBDA(r,XLOOKUP(r,a,b,""))),
sc_2,BYROW(--INDEX(h,,3),LAMBDA(r,XLOOKUP(r,a,b,""))),
TEXTJOIN(CHAR(10),,MAP(INDEX(h,,1),sc_1,sc_2,LAMBDA(x,y,z,TEXTJOIN(", ",,x,IFERROR(y,""),IFERROR(z,""))))))
Bookmarks