SQLUSA.com
SQL SERVER 2008 GRAND SLAM
FREE TRIAL  CLICK HERE TO ORDER  SEARCH
SQL JOBS SQL Server Training Scripts JOB BANK
  SQL Server 2008 Training Scripts  
  SQL Server 2005 Training Scripts  
News SQL Server Articles SQL Format

How to sort on multiple conditions?

Execute the following Microsoft SQL Server T-SQL scripts in Management Studio Query Editor to demonstrate a data-driven ORDER BY columns.

-- SQL order by case - SQL case order by - SQL conditional sort - dynamic sorting

USE AdventureWorks

GO

 

DECLARE  @SortBy          CHAR(10),

         @SortByDirection CHAR(1)

 

SET @SortBy = 'City'

SET @SortByDirection = 'A' -- or D for descending

 

SELECT   AddressLine1,

         City,

         State = p.Name,

         PostalCode

FROM     Person.Address a

         INNER JOIN Person.StateProvince p

           ON a.StateProvinceID = p.StateProvinceID

WHERE    AddressLine1 LIKE '%drive%'

ORDER BY CASE

           WHEN @SortBy = 'Postal'

                AND @SortByDirection = 'D' THEN PostalCode

         END DESC,

         CASE

           WHEN @SortBy = 'Postal'

                AND @SortByDirection = 'A' THEN PostalCode

         END,

         CASE

           WHEN @SortBy = 'State'

                AND @SortByDirection = 'D' THEN p.[Name]

         END DESC,

         CASE

           WHEN @SortBy = 'State'

                AND @SortByDirection = 'A' THEN p.[Name]

         END,

         CASE

           WHEN @SortBy = 'City'

                AND @SortByDirection = 'D' THEN City

         END DESC,

         CASE

           WHEN @SortBy = 'City'

                AND @SortByDirection = 'A' THEN City

         END

 

GO

 

/* Partial results

 

AddressLine1            City        State       PostalCode

42500 West Park Drive   Atlanta     Georgia     30308

4167 Whitehall Drive    Ballard     Washington  98107

4304 Dos Rios Drive     Ballard     Washington  98107

4930 Augustine Drive    Ballard     Washington  98107

5793 St. Helena Drive   Ballard     Washington  98107

630 Plymouth Drive      Ballard     Washington  98107

1727 The Trees Drive    Ballard     Washington  98107

*/

-----------

 

-----------

-- SELECT TOP 10 per group; CTE ORDER BY ROW_NUMBER PARTITION BY; SQL Server 2005 and on

-----------

;WITH CTE AS

(SELECT   TOP 1 WITH TIES PSC.Name AS SubCategory,

                          P.Name   AS ProductName

 FROM     Production.ProductSubcategory PSC

          INNER JOIN Production.Product P   -- alternate LEFT JOIN

            ON P.ProductSubcategoryID = PSC.ProductSubcategoryID

 ORDER BY ROW_NUMBER()

           OVER(PARTITION BY P.ProductSubcategoryID

           ORDER BY ProductID) / (10+1) )

 SELECT * FROM CTE

 ORDER BY Subcategory,

          ProductName;

------------

 

Order SQL 2008 GRAND SLAM Today!
SQLUSA.com Home Page
SQL Server Training at www.sqlusa.com.
SQL Server 2008 Video Training at www.sqlusa.com.
SQL Server 2005 Training Videos at www.sqlusa.com.
Microsoft SQL Server 2000 Training Videos at www.sqlusa.com.

FREE SQL & Business Intelligence / OLAP Short Videos on YOUTUBE.com

Microsoft Community Contributor 2011
Invest in Your SUCCESS!

Search SQLUSA FREE SQL Server Articles & FREE T-SQL Scripts


Copyright 2005-2011, SMI Corp. All Rights Reserved.

SQL Server 2012 is a program product of Microsoft Corporation.
SQL Server 2008 is a program product of Microsoft Corporation.
SQL Server 2005 is a program product of Microsoft Corporation.
SQL Server 2000 is a program product of Microsoft Corporation.