Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Сложно сортиране на база следващи и предишни записи в SQL

Ако разбирам правилно вашето изискване, имате някои части от parentId и искате всяка част да започва с letter те са в предишната част и завършват с letter s те са в следващата част, ако да опитайте това:

;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. SQLServer - Как да намеря зависими таблици в моята таблица?

  2. Как да избера само последния запис в таблица?

  3. проблем с дизайна на базата данни при добавяне на нови колони към таблица от приложение

  4. Sql Server Service Broker

  5. Кое място за съхранение, SQL Server или файлова система, би довело до по-добра производителност при запазване на tiff изображения?