Specific row at the top then sort the rest result set in SQL Server


In this post, “Specific row at the top then sort the rest result set in SQL Server“, we are going to learn that how we can order a result set in a customized way which cannot be achieved using ORDER by Clause in a simple way.

To demonstrate this, let’s create a sample table named as “tbl_Department” and insert some dummy rows in it. Below is the code to create the sample table:

IF(OBJECT_ID('dbo.tbl_Department') IS NOT NULL)
DROP TABLE tbl_Department
GO
CREATE TABLE tbl_Department
(
DeptId INT IDENTITY(1,1) NOT NULL,
DeptName VARCHAR(256) NOT NULL,
DeptAddress VARCHAR(512),
DeptContact VARCHAR(15)
)
GO

Now, add some sample rows into the table:

INSERT INTO tbl_Department
(DeptName, DeptAddress, DeptContact)
VALUES
('Engineering', 'New Delhi', '1234567890'),
('Human Resources', 'Chennai', '9876543210'),
('Admin', 'Kolkata', '2763282789'),
('Human Resources', 'New Delhi', '1928272727'),
('Not Assigned', 'Mumbai', '1839288976')
GO

Let’s have a look at the table data now:

Sample table

Sample table

From this table, we need to extract all rows and columns by ordering them on DeptName column. However, we need to keep “Not Assigned” department name value at the top of the list and then the rest of the department name values should be ordered alphabetically in ascending order. Have a look at the desired output:

Desired output

Desired output

How to keep specific row at the top then sort the rest result set in SQL Server

Now, we will be discussing the method which we are going to use to keep a specific record at the top of the list and then sort the rest of the list by a given column name. Let’s discuss the method.

Using CASE expression with ORDER BY clause

In this method, we will be using a CASE expression in order by clause which will keep the “Not Assigned” department name at the top of the list. Below is the code:

SELECT * FROM tbl_Department
ORDER BY
(CASE WHEN DeptName = 'Not Assigned' THEN 0 ELSE 1 END), DeptName
GO

In above code, we are using “(CASE WHEN DeptName = ‘Not Assigned’ THEN 0 ELSE 1 END)” case expression which keeps the “Not Assigned” department name always at top of the list. After that, we have used “DeptName” column to sort the rest of the values in ascending order alphabetically.

Using this trick, we can keep a given row at the top of the select list and then we can use other column names to sort the result sets as needed.

Thanks for the reading. Please share your input in the comment section of this post and share this post if you like this.

Rate This
[Total: 0    Average: 0/5]

Gopal Krishna Ranjan

About Gopal Krishna Ranjan

I am Gopal Krishna Ranjan, having 6+ years of industry experience in Software development using Microsoft technologies. I have a head down experience in Database development, performance tuning in SQL Server, T-SQL optimization, BI (Business Intelligence) project implementation, reporting in SSRS, using SSIS for ETL, implementing multi dimensional and tabular data-warehouse in SSAS, querying cubes using MDX and DAX, Windows and Web Applications development with C#.

Leave a comment

Your email address will not be published. Required fields are marked *

*