EXERCISE TOPIC▼
SQL EXERCISES▼
SQL EXERCISES▼
- Simple Queries (4)
- Setting criteria using WHERE (5)
- Calculations (7)
- Calculations using dates (4)
- Basic joins (8)
- More exotic joins (2)
- Aggregation and grouping (8)
- Views (5)
- Subqueries (5)
- Stored procedures (5)
- Variables (8)
- Parameters and return values (11)
- Testing conditions (1)
- Looping (3)
- Scalar functions (6)
- Transactions (5)
- Creating tables (5)
- Temporary tables and table variables (9)
- Table-valued functions (6)
- Derived tables and CTEs (13)
- Dynamic SQL (4)
- Pivots (2)
- Triggers (2)
- Archived (70)
SQL | Calculations exercise | With no help offered, list events with interesting letters!
This exercise is provided to allow potential course delegates to choose the correct Wise Owl Microsoft training course, and may not be reproduced in whole or in part in any format without the prior written consent of Wise Owl.
You can learn how to do this exercise if you attend one of more of the courses listed below!
Software ==> | SQL (198 exercises) |
Version ==> | Any version of SQL Server |
Topic ==> | Calculations (7 exercises) |
Level ==> | Harder than average |
Courses ==> | Introduction to SQL / Fast-track SQL |
- Go into SQL Server Management Studio;
- Open the SQL file you've just unzipped (you can press CTRL + O to do this); then
- Execute this script.
This will generate the database that you'll need to use in order to do this exercise (note that the database and script are only to be used for exercises published on this website, and may not be reused or distributed in any form without the prior written permission of Wise Owl).
You need a minimum screen resolution of about 700 pixels width to see our exercises. This is because they contain diagrams and tables which would not be viewable easily on a mobile phone or small laptop. Please use a larger tablet, notebook or desktop computer, or change your screen resolution settings.
If you've reached this point, you're probably ready for a challenge. See if you can write a query to list out all of the non-boring events:

The first few of the 28 events you should see.
As the above query shows, a boring event is one which doesn't begin and end with the same letter, and which doesn't begin and end with a vowel!
If you get this working, you could always show that there aren't any ultra-interesting events (ones which begin and end in a vowel).
Save this query as Boring events, then close it down.
I think the following query should work too!
SELECT EventName
,CASE WHEN EventName LIKE '[AEIOU]%' AND EventName LIKE '%[aeiou]' THEN 'Begin and ends with vowel'
ELSE 'Same Letter' END AS Verdict
FROM tblEvent
Order BY Verdict
I added in the default of "Boring event" but this can be left out.
select EventName, case when left(eventname, 1) = right(eventname, 1) then 'Same letter'
when left(eventname, 1) like '[aeiou]' and right(eventname, 1) like '[aeiou]' then 'Begins and ends with a vowel'
else 'Boring event' end as Verdict
from tblevent
order by Verdict
SELECT * FROM (
SELECT EventName
, CASE
WHEN LOWER(LEFT(EventName,1)) IN ('a','e','i','o','u') AND LOWER(RIGHT(EventName,1)) IN ('a','e','i','o','u')
THEN 'Begins and ends with vowle'
WHEN LOWER(LEFT(EventName,1)) = LOWER(RIGHT(EventName,1))
THEN 'Same letter'
END AS Verdict
FROM tblEvent ) AS T
WHERE Verdict IS NOT NULL
NOTE: The QUESTION IS ORDERD BY EVENTDATE, if anyone was wondering the order.
If anyone could verify if this is correct, because it seem uncomfortably long:
SELECT
EventName,
CASE
WHEN LEFT(EventName, 1) = RIGHT(EventName, 1)
THEN 'Same letter'
WHEN (LEFT(EventName, 1) = 'a' OR LEFT(EventName, 1) = 'e' OR LEFT(EventName, 1) = 'i' OR LEFT(EventName, 1) = 'o' OR LEFT(EventName, 1) = 'u') AND (RIGHT(EventName, 1) = 'a' OR RIGHT(EventName, 1) = 'e' OR RIGHT(EventName, 1) = 'i' OR RIGHT(EventName, 1) = 'o' OR RIGHT(EventName, 1) = 'u')
THEN 'Begins and ends with vowel'
END as 'Verdict'
FROM
tblEvent
WHERE (CASE
WHEN LEFT(EventName, 1) = RIGHT(EventName, 1)
THEN 'Same letter'
WHEN (LEFT(EventName, 1) = 'a' OR LEFT(EventName, 1) = 'e' OR LEFT(EventName, 1) = 'i' OR LEFT(EventName, 1) = 'o' OR LEFT(EventName, 1) = 'u') AND (RIGHT(EventName, 1) = 'a' OR RIGHT(EventName, 1) = 'e' OR RIGHT(EventName, 1) = 'i' OR RIGHT(EventName, 1) = 'o' OR RIGHT(EventName, 1) = 'u')
THEN 'Begins and ends with vowel'
END ) IS NOT NULL
ORDER BY
EventDate
Two ways to minimize the code. Firstly use an IN statement to have it group the sections without all those OR statements. To remove the lengthy WHERE clause, simply wrap up the SELECT in parens and name the result, then select all values from the result and do a WHERE on there, as seen here:
USE WorldEvents
SELECT t.* FROM (SELECT EventName,
CASE WHEN LEFT(EventName, 1) = RIGHT(EventName, 1)
THEN 'Same Letter'
WHEN LEFT(EventName, 1) IN ('a', 'e', 'i', 'o', 'u') AND RIGHT(EventName, 1) IN ('a', 'e', 'i', 'o', 'u')
THEN 'First letter vowel'
END AS 'Result'
FROM tblEvent) t
WHERE t.Result IS NOT NULL