AdventureWorks Database: Order table conditionally using case statement
SQL Query - AdventureWorks: Exercise-33 with Solution
33. From the following table write a query in SQL to set the result in order by the column TerritoryName when the column CountryRegionName is equal to 'United States' and by CountryRegionName for all other rows.
Sample table: Sales.SalesPersonbusinessentityid|territoryid|salesquota|bonus|commissionpct|salesytd |saleslastyear|rowguid |modifieddate | ----------------+-----------+----------+-----+-------------+------------+-------------+------------------------------------+-----------------------+ 274| | | 0| 0| 559697.5639| 0|48754992-9ee0-4c0e-8c94-9451604e3e02|2010-12-28 00:00:00.000| 275| 2| 300000| 4100| 0.012|3763178.1787| 1750406.4785|1e0a7274-3064-4f58-88ee-4c6586c87169|2011-05-24 00:00:00.000| 276| 4| 250000| 2000| 0.015|4251368.5497| 1439156.0291|4dd9eee4-8e81-4f8c-af97-683394c1f7c0|2011-05-24 00:00:00.000| 277| 3| 250000| 2500| 0.015|3189418.3662| 1997186.2037|39012928-bfec-4242-874d-423162c3f567|2011-05-24 00:00:00.000| 278| 6| 250000| 500| 0.01|1453719.4653| 1620276.8966|7a0ae1ab-b283-40f9-91d1-167abf06d720|2011-05-24 00:00:00.000| 279| 5| 300000| 6700| 0.01| 2315185.611| 1849640.9418|52a5179d-3239-4157-ae29-17e868296dc0|2011-05-24 00:00:00.000| 280| 1| 250000| 5000| 0.01|1352577.1325| 1927059.178|be941a4a-fb50-4947-bda4-bb8972365b08|2011-05-24 00:00:00.000| 281| 4| 250000| 3550| 0.01|2458535.6169| 2073505.9999|35326ddb-7278-4fef-b3ba-ea137b69094e|2011-05-24 00:00:00.000| 282| 6| 250000| 5000| 0.015|2604540.7172| 2038234.6549|31fd7fc1-dc84-4f05-b9a0-762519eacacc|2011-05-24 00:00:00.000| 283| 1| 250000| 3500| 0.012|1573012.9383| 1371635.3158|6bac15b2-8ffb-45a9-b6d5-040e16c2073f|2011-05-24 00:00:00.000| 284| 1| 300000| 3900| 0.019|1576562.1966| 0|ac94ec04-a2dc-43e3-8654-dd0c546abc17|2012-09-23 00:00:00.000| 285| | | 0| 0| 172524.4512| 0|cfdbef27-b1f7-4a56-a878-0221c73bae67|2013-03-07 00:00:00.000| 286| 9| 250000| 5650| 0.018|1421810.9242| 2278548.9776|9b968777-75dc-45bd-a8df-9cdaa72839e1|2013-05-23 00:00:00.000| 287| | | 0| 0| 519905.932| 0|1dd1f689-df74-4149-8600-59555eef154b|2012-04-09 00:00:00.000| 288| 8| 250000| 75| 0.018|1827066.7118| 1307949.7917|224bb25a-62e3-493e-acaf-4f8f5c72396a|2013-05-23 00:00:00.000| 289| 10| 250000| 5150| 0.02|4116871.2277| 1635823.3967|25f6838d-9db4-4833-9ddc-7a24283af1ba|2012-05-23 00:00:00.000| 290| 7| 250000| 985| 0.016|3121616.3202| 2396539.7601|f509e3d4-76c8-42aa-b353-90b7b8db08de|2012-05-23 00:00:00.000|
Sample Solution:
-- Selecting specific columns from the vSalesPerson view
SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
-- From the Sales schema's vSalesPerson view
FROM Sales.vSalesPerson
-- Filtering the results to include only rows where TerritoryName is not NULL
WHERE TerritoryName IS NOT NULL
-- Ordering the results using a conditional CASE statement
-- If CountryRegionName is 'United States', order by TerritoryName
-- Otherwise, order by CountryRegionName
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
ELSE CountryRegionName END;
Explanation:
- The SQL query retrieves data from the vSalesPerson view within the Sales schema.
- It selects four columns: BusinessEntityID, LastName, TerritoryName, and CountryRegionName.
- The WHERE clause filters the results to include only rows where TerritoryName is not NULL.
- The ORDER BY clause specifies the sorting criteria for the result set using a conditional expression.
- The CASE statement checks the value of CountryRegionName. If it is 'United States', the rows are ordered by TerritoryName. Otherwise, they are ordered by CountryRegionName.
- This results in a sorting order where territories within the United States are listed alphabetically by TerritoryName, and territories outside the United States are listed alphabetically by CountryRegionName.
Sample Output:
businessentityid|lastname |territoryname |countryregionname| ----------------+-----------------+--------------+-----------------+ 286|Tsoflias |Australia |Australia | 282|Saraiva |Canada |Canada | 278|Vargas |Canada |Canada | 277|Carson |Central |United States | 290|Varkey Chudukatil|France |France | 288|Valdez |Germany |Germany | 275|Blythe |Northeast |United States | 280|Ansman-Wolfe |Northwest |United States | 284|Mensa-Annan |Northwest |United States | 283|Campbell |Northwest |United States | 279|Reiter |Southeast |United States | 276|Mitchell |Southwest |United States | 281|Ito |Southwest |United States | 289|Pak |United Kingdom|United Kingdom |
SQL AdventureWorks Editor:
Practice Online
Contribute your code and comments through Disqus.
Previous: Order a table in ASC or DESC condionally.
Next: Using rank function with order by clause.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://www.w3resource.com/sql-exercises/adventureworks/sql-adventureworks-exercise-33.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics