Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Penyortiran kompleks berdasarkan catatan berikutnya dan sebelumnya dalam SQL

Jika saya memahami kebutuhan Anda dengan benar, Anda memiliki beberapa bagian parentId dan Anda ingin setiap bagian dimulai dengan letter s itu ada di bagian sebelumnya Dan diakhiri dengan letter s itu ada di bagian selanjutnya, Jika ya coba ini:

;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. Tidak dapat menemukan pengguna '', karena tidak ada atau Anda tidak memiliki izin

  2. Apa itu SQL Server Management Studio (SSMS)?

  3. Bagaimana saya bisa menyalin catatan data antara dua contoh database SQLServer?

  4. Perbedaan Antara Fungsi Bernilai Tabel Multi-Pernyataan &Fungsi Bernilai Tabel Sebaris di SQL Server

  5. Mengapa FireError gagal di C# 2012, tetapi berfungsi di VB, sementara FireInformation berfungsi di keduanya?