Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL में अगले और पिछले रिकॉर्ड के आधार पर जटिल छँटाई

अगर मैं आपकी आवश्यकता को ठीक से समझता हूं, तो आपके पास 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कौन सा तेज COALESCE या ISNULL है?

  2. क्या SqlConnectionObject संपत्ति का उपयोग कर बनाम एसएमओ सर्वरकनेक्शन लेनदेन विधियों में कोई अंतर है?

  3. दो तिथियों के बीच तिथियों का चयन करने के लिए SQL क्वेरी

  4. समूह द्वारा खंड के साथ SQL अल्पविराम से अलग पंक्ति

  5. SQL 2008 में अंतिम अनुक्रमणिका वर्ण प्राप्त करने का सबसे अच्छा तरीका क्या है?