Yes, if you are still picking Keys at top level, the Select statement stays on top. You just work your way down to the test you want to provide:
In[1]:= as = <|x -> <|a -> 1, b -> <|c -> 1, d -> 2|>|>,
y -> <|a -> 1, b -> <|c -> 2, d -> 2|>|>|>
Out[1]= <|x -> <|a -> 1, b -> <|c -> 1, d -> 2|>|>,
y -> <|a -> 1, b -> <|c -> 2, d -> 2|>|>|>
In[2]:= ds = Dataset[as]
Out[2]= Dataset[
Association[
x -> Association[a -> 1, b -> Association[c -> 1, d -> 2]],
y -> Association[a -> 1, b -> Association[c -> 2, d -> 2]]],
TypeSystem`Assoc[TypeSystem`AnyType,
TypeSystem`Assoc[TypeSystem`AnyType, TypeSystem`AnyType, 2], 2],
Association["ID" -> 168461536877204]]
In[3]:= ds[Select[#[b, c] == 2 &]]
Out[3]= Dataset[
Association[
y -> Association[a -> 1, b -> Association[c -> 2, d -> 2]]],
TypeSystem`Assoc[TypeSystem`AnyType,
TypeSystem`Assoc[TypeSystem`AnyType, TypeSystem`AnyType, 2],
TypeSystem`AnyLength],
Association["Origin" -> HoldComplete[
Query[
Select[#[b, c] == 2& ]][
Dataset`DatasetHandle[168461536877204]]], "ID" -> 216114199026345]]