अगर मैं आपकी आवश्यकता को ठीक से समझता हूं, तो आपके पास parentId
. के कुछ हिस्से हैं और आप चाहते हैं कि प्रत्येक भाग letter
. से प्रारंभ हो वे पिछले भाग में हैं और letter
. के साथ समाप्त होते हैं वे अगले भाग में हैं, यदि हाँ तो इसे आजमाएँ:
;WITH t AS (
SELECT
c.id,
c.parentId,
c.letter,
dt.parentSeq
FROM
Child c
JOIN (
SELECT
ci.parentId, ROW_NUMBER() OVER (ORDER BY p.number) parentSeq
FROM
Child ci
JOIN
Parent p ON ci.parentId = p.id
GROUP BY
ci.parentId, p.number) dt ON c.parentId = dt.parentId
)
SELECT
p.number,
t.letter
FROM
t
JOIN
Parent p ON t.parentId = p.id
ORDER BY
p.number,
CASE WHEN t.letter IN (SELECT ti.letter FROM t ti WHERE ti.parentSeq = t.parentSeq - 1) THEN 0
WHEN t.letter IN (SELECT ti.letter FROM t ti WHERE ti.parentSeq = t.parentSeq + 1) THEN 2
ELSE 1 END,
t.letter