logo

رقم صف خادم SQL

رقم الصف هو الأكثر شيوعا وظيفة الترتيب المستخدمة في SQL Server. الدالة ROW_NUMBER() ينشئ رقمًا تسلسليًا لكل صف داخل القسم في الناتج الناتج في كل قسم، يبدأ رقم الصف الأول بالرقم 1. ويجب علينا دائمًا استخدام الرقم ترتيب حسب شرط لضمان تعيين الأرقام في التسلسل الصحيح. القيم التي يتم إرجاعها بواسطة هذه الدالة هي من ذكاء كبير نوع البيانات. تأتي هذه الوظيفة مع SQL Server 2005 والإصدارات الأحدث من MS SQL.

طرق السلسلة جافا

يحدد ROW_NUMBER قيمة مؤقتة عند تنفيذ الاستعلام. إذا كنت ترغب في الحصول على الأرقام في الجدول، عليك أن ترى هوية الملكية و تسلسل . عندما تواجه الدالة ROW_NUMBER في SQL Server قيمتين متطابقتين في نفس القسم، فإنها تقوم بتعيين أرقام تصنيف مختلفة لهما. سيتم تحديد رقم الرتبة حسب الترتيب الذي يتم عرضها به.

ليس هناك ما يضمن أن القيمة التي ترجعها هذه الوظيفة سيتم ترتيبها بنفس الطريقة لكل عملية تنفيذ ما لم يكن ما يلي صحيحًا:

  • قيم الأعمدة المقسمة فريدة من نوعها
  • تعتبر قيم الأعمدة ORDER BY فريدة من نوعها
  • مزيج الأعمدة والترتيب حسب فريد من نوعه

بناء الجملة

فيما يلي بناء الجملة الذي يوضح الدالة ROW_NUMBER():

 ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... ) 

دعونا نفهم بناء جملة الدالة ROW NUMBER():

زيادة

من المهم فهم هذه الجملة التي تحدد النافذة أو مجموعة الصفوف التي تعمل بها وظيفة النافذة. إن PARTITION BY و ORDER BY هما الجملتان المحتملتان في عبارة OVER. يتم دعم تعبير ORDER BY الخاص بعبارة OVER عندما يجب أن تأتي الصفوف بترتيب معين حتى يتم تنفيذ الوظيفة.

التقسيم حسب

  • إنها عبارة اختيارية تقسم مجموعة النتائج إلى أقسام (مجموعات من الصفوف). ثم يتم تطبيق وظيفة ROW NUMBER() على كل قسم وتعيين رقم تصنيف كل قسم على حدة.
  • إذا قمنا بحذف القسم حسب العبارة، فستتعامل الدالة ROW_NUMBER مع النتيجة بأكملها كقسم واحد وتوفر الترتيب من الأعلى إلى الأسفل.

ترتيب حسب

تسمح لنا هذه الجملة بفرز صفوف مجموعة النتائج داخل كل قسم. إنها عبارة مطلوبة لأن الدالة ROW_NUMBER() تعتمد على الترتيب.

مثال

دعونا نفهم كيفية عمل الدالة ROW_NUMBER في جدول SQL Server مع مثال. أولا سنقوم بإنشاء جدول بإسم ' الأشخاص 'باستخدام العبارة أدناه:

 CREATE TABLE Persons ( person_name varchar(45) NOT NULL, product varchar(45) DEFAULT NULL, country varchar(25) DEFAULT NULL, price float, years int NOT NULL ); 

بعد ذلك، سنضيف بعض السجلات إلى هذا الجدول باستخدام العبارة التالية:

 INSERT INTO Persons (person_name, product, country, price, years) VALUES ('Steffen', 'Computer', 'USA', 20000.00, 2018), ('Joseph', 'Laptop', 'India', 35000.00, 2016), ('Kevin', 'TV', 'USA', 15000.00, 2016), ('Thompson', 'Mobile', 'France', 12500.00, 2017), ('Donald', 'Laptop', 'England', 30000.00, 2018), ('Joseph', 'Mobile', 'India', 18000.00, 2018), ('Matthew', 'Desktop', 'France', 22000.00, 2017), ('Antonio', 'Mouse', 'England', 1200.00, 2016); 

بعد ذلك، قم بالتحقق من البيانات باستخدام يختار إفادة. سوف نحصل على الناتج أدناه:

رقم صف خادم SQL

1. مثال ROW_NUMBER() بسيط

كم مليون في المليار

البيان التالي يعرض تفاصيل الشخص ويضيف رقمًا صحيحًا تسلسليًا لكل صف باستخدام ROW_NUMBER():

 SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons; 

هنا، لم نقم بتحديد جملة PARTITION BY بحيث تتعامل الدالة ROW_NUMBER() مع مجموعة النتائج بأكملها كقسم واحد. بعد تنفيذ العبارة سنحصل على المخرجات التالية:

رقم صف خادم SQL

2. ROW_NUMBER() على مثال الأقسام

توفر الدالة ROW NUMBER() المستخدمة في هذا المثال رقمًا تسلسليًا لكل سجل داخل قسم في الجدول. يقوم دائمًا بإعادة تهيئة رقم الصف عندما يتغير العام:

 SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons; 

هنا، استخدمنا جملة PARTITION BY التي تقسم 'الأشخاص' الجدول إلى أقسام على أساس 'سنين' عمود. بعد التنفيذ سنحصل على المخرجات التالية:

رقم صف خادم SQL

3. ROW_NUMBER() مثال لترقيم الصفحات

الاختبار اليدوي

يمكننا أيضًا استخدام الدالة ROW_NUMBER() لترقيم الصفحات. على سبيل المثال ، إذا أردنا الحصول على جميع المعلومات الخاصة بشخص ما في تطبيق ما من خلال الصفحات، فسنقوم أولاً بتعيين رقم تسلسلي لكل صف باستخدام الدالة ROW_NUMBER(). ثانياً، قم بفرز الصفوف حسب الصفحة المطلوبة.

والبيان التالي يوضح ذلك بشكل أوضح:

 SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>It will give the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-4.webp" alt="SQL Server Row Number"> <p>If we do not want to use the <strong>subquery</strong> , we can use the <strong>common table expression (CTE)</strong> as below statement:</p> <pre> WITH CTE_Person AS ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) SELECT * FROM CTE_Person WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>In this example, we have first specified the CTE that uses the ROW_NUMBER() function to assign each row in the result set sequentially. Second, the outer query returned the desired result. After execution, we will get the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-5.webp" alt="SQL Server Row Number"> <h3>Conclusion</h3> <p>In this article, we learned how to give a sequential number to each record within a partition of a query using the ROW NUMBER() function in SQL Server.</p> <hr></=></pre></=>