Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kompleksowe sortowanie na podstawie następnych i poprzednich rekordów w SQL

Jeśli dobrze rozumiem Twoje wymagania, masz pewne części parentId i chcesz, aby każda część zaczynała się od letter s te są w poprzedniej części I kończą się letter Są one w następnej części, Jeśli tak, spróbuj tego:

;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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyeksportować dane utf-8 z serwera sql 2008 do programu Excel?

  2. Utwórz widok w wielu bazach danych

  3. Dlaczego SQL Server zaokrągla wyniki dzielenia dwóch liczb całkowitych?

  4. Jak zaimportować plik .bak do programu Microsoft SQL Server 2012?

  5. Jak usunąć spacje nierozdzielające z kolumny na serwerze SQL?