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

SQL सर्वर 2005 - Row_Number ()

ORDER BY ROW_NUMBER . में क्लॉज परिणामसेट के क्रम की गारंटी नहीं देता है।

ROW_NUMBER आमतौर पर क्वेरी योजना में छँटाई का उपयोग करता है जिसके परिणामस्वरूप यह तथ्य सामने आता है कि मान पूर्वनिर्धारित हैं।

यह एक साइड इफेक्ट है और इस पर भरोसा नहीं करना चाहिए।

DISTINCT Hash Match (Aggregate) . का उपयोग करता है जो छँटाई तोड़ता है।

ORDER BY Add जोड़ें क्वेरी के अंत तक क्लॉज:

SELECT  DISTINCT (ID), State_Id, Name_Of_Trip, Date_Of_Travel, Creation_Date, Locking_Id, Applicant_Name, Reference_Number, State_Name
FROM    (
        SELECT  app.ID, app.State_Id, app.Name_Of_Trip, app.Date_Of_Travel,
                app.Creation_Date, app.Locking_Id, app.Applicant_Name, app.Reference_Number, 
                State.Name AS State_Name, ROW_NUMBER() OVER(ORDER BY Reference_Number DESC) as rowNum  
        FROM    Application_Leg AS app 
        INNER JOIN
                State AS state 
        ON      app.State_Id = state.ID
        WHERE   app.State_Id IN (5, 6, 8)
                AND app.Organisation_Id = 12 
                AND Leg_Number IN
                (
                SELECT  Leg_Number 
                FROM    Application_Leg as al
                INNER JOIN
                        Organisation as org
                ON      al.Organisation_Id = org.ID
                WHERE   al.ID = app.ID
                        AND org.Approval_Required = 1
                        AND Mode_Of_Transport = 1
                )
        ) AS pagedApplications
WHERE   rowNum BETWEEN 0 AND (0 + 10)
ORDER BY
        ReferenceNumber DESC

यह भी ध्यान रखें कि यह 10 नहीं लौटाएगा विशिष्ट परिणाम, यह DISTINCT return लौटाएगा पहले 10 . में से परिणाम।

यदि आप पूर्व चाहते हैं, तो इसका उपयोग करें:

SELECT  DISTINCT TOP 10 ID, State_Id, Name_Of_Trip, Date_Of_Travel, Creation_Date, Locking_Id, Applicant_Name, Reference_Number, State_Name
FROM    (
        SELECT  app.ID, app.State_Id, app.Name_Of_Trip, app.Date_Of_Travel,
                app.Creation_Date, app.Locking_Id, app.Applicant_Name, app.Reference_Number, 
                State.Name AS State_Name
        FROM    Application_Leg AS app 
        INNER JOIN
                State AS state 
        ON      app.State_Id = state.ID
        WHERE   app.State_Id IN (5, 6, 8)
                AND app.Organisation_Id = 12 
                AND EXISTS
                (
                SELECT  Leg_Number 
                FROM    Application_Leg AS al
                INNER JOIN
                        Organisation as org
                ON      al.Organisation_Id = org.ID
                WHERE   al.ID = app.ID
                        AND al.LegNumber = app.LegNumber
                        AND org.Approval_Required = 1
                        AND Mode_Of_Transport = 1
                )
        ) AS pagedApplications
ORDER BY
        ReferenceNumber DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दूसरा सबसे बड़ा वेतन

  2. क्या SQL सर्वर पहचान कॉलम के अनुक्रमिक सम्मिलन की गारंटी देता है?

  3. SQL XML आयात:XQuery [मान ()]:) अपेक्षित था

  4. SQL सर्वर में सभी अक्षम विदेशी कुंजी बाधाओं को कैसे वापस करें (T-SQL उदाहरण)

  5. SQL Server 2008 के विरुद्ध चलते समय SqlDataReader.HasRows में कोई बग है?