Это должно работать:
MATCH path = (a:P)-[*1..2]->(r:R)
WHERE a.id = 'A' AND (LENGTH(path) = 1 OR 'Q' IN LABELS(NODES(path)[1]))
RETURN DISTINCT r
Этот простой пример предполагает последовательную направленность отношений «вперед» для обоих отношений.
[ДОБАВЛЕНИЕ]
Это должно быть лучший запрос, чем тот, о котором спрашивали в комментариях:
MATCH path = allShortestPaths((a:P)-[*1..2]->(r:R))
WHERE a.id = $resource_key AND (LENGTH(path) = 1 OR 'Q' IN LABELS(NODES(path)[1]))
RETURN COUNT(DISTINCT r)