sql >> Database teknologi >  >> RDS >> Sqlserver

Kompleks sortering baseret på næste og tidligere poster i SQL

Hvis jeg forstår dit krav rigtigt, har du nogle dele af parentId og du ønsker, at hver del skal starte med letter s dem er i forrige del og slutter med letter Hvis de er i næste del, så prøv dette:

;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


  1. SQL Server-pivot vs. multiple join

  2. hukommelsesforbrug eksport fra database til csv i php

  3. Bruger du klasser korrekt i andre klasser i php?

  4. MySQL WHERE LIKE arbejder ikke med flere felter ved hjælp af php og pdo bind