Tip
All examples used are valid against the Microsoft Northwind Sample Database You can run the resulting SQL from the examples against Northwind in order to test and play with the SqlObjects library.
CASEΒΆ
CASE WHEN
Statement in a SELECT
List
using System.Data;
using KnightMoves.SqlObjects;
var sql = TSQL
.SELECT()
.COLUMN("p", "ProductID")
.COLUMN("p", "ProductName")
.COLUMN("p", "UnitPrice")
.CASE()
.WHEN("p", "UnitPrice")
.IsLessThanOrEqualTo(10.00m)
.THEN("Low")
.WHEN("p", "UnitPrice")
.IsGreaterThan(10.00m)
.AND("p", "UnitPrice").IsLessThanOrEqualTo(50.00m)
.THEN("Moderate")
.WHEN("p", "UnitPrice")
.IsGreaterThan(50.00m)
.THEN("Expensive")
.END().AS("CostLevel")
.FROM("dbo", "Products", "p")
.Build()
;
Console.WriteLine(sql);
Output:
SELECT
[p].[ProductID],
[p].[ProductName],
CASE
WHEN [p].[UnitPrice] <= 10.00 THEN 'Low'
WHEN [p].[UnitPrice] > 10.00 AND [p].[UnitPrice] <= 50.00 THEN 'Moderate'
WHEN [p].[UnitPrice] > 50.00 THEN 'Expensive'
END AS [CostLevel]
FROM [dbo].[Products] p
CASE input_expression
Statement in a SELECT
List
using System.Data;
using KnightMoves.SqlObjects;
var sql = TSQL
.SELECT()
.COLUMN("c", "CustomerID")
.COLUMN("c", "CompanyName").AS("Company")
.COLUMN("c", "ContactName").AS("Contact")
.COLUMN("c", "ContactTitle")
.CASE("c", "ContactTitle")
.WHEN("Owner").THEN("Owner")
.WHEN("Accounting Manager").THEN("Management")
.WHEN("Marketing Manager").THEN("Management")
.WHEN("Sales Manager").THEN("Management")
.ELSE("Employee")
.END().AS("Level")
.FROM("dbo", "Customers", "c")
.Build()
;
Console.WriteLine(sql);
Output:
SELECT
[c].[CustomerID],
[c].[CompanyName] AS [Company],
[c].[ContactName] AS [Contact],
[c].[ContactTitle],
CASE [c].[ContactTitle]
WHEN 'Owner' THEN 'Owner'
WHEN 'Accounting Manager' THEN 'Management'
WHEN 'Marketing Manager' THEN 'Management'
WHEN 'Sales Manager' THEN 'Management'
ELSE 'Employee'
END AS [Level]
FROM [dbo].[Customers] c
CASE WHEN
Statement in a WHERE
Clause
using System.Data;
using KnightMoves.SqlObjects;
var sql = TSQL
.SELECT()
.COLUMN("c", "CustomerID")
.COLUMN("c", "CompanyName").AS("Company")
.COLUMN("c", "ContactName").AS("Contact")
.COLUMN("c", "ContactTitle")
.FROM("dbo", "Customers", "c")
.WHERE()
.CASE("c", "ContactTitle")
.WHEN("Owner").THEN("Owner")
.WHEN("Accounting Manager").THEN("Management")
.WHEN("Marketing Manager").THEN("Management")
.WHEN("Sales Manager").THEN("Management")
.ELSE("Employee")
.END().IsEqualTo("Management")
.Build()
;
Console.WriteLine(sql);
Output:
SELECT
[c].[CustomerID],
[c].[CompanyName] AS [Company],
[c].[ContactName] AS [Contact],
[c].[ContactTitle]
FROM [dbo].[Customers] c
WHERE 1=1
AND CASE [c].[ContactTitle]
WHEN 'Owner' THEN 'Owner'
WHEN 'Accounting Manager' THEN 'Management'
WHEN 'Marketing Manager' THEN 'Management'
WHEN 'Sales Manager' THEN 'Management'
ELSE 'Employee'
END = 'Management'
using System.Data;
using KnightMoves.SqlObjects;
var sql = TSQL
.Script(@"
DECLARE @orgLevel AS VARCHAR(50)
SET @orgLevel = 'Management'
")
.SELECT()
.COLUMN("c", "CustomerID")
.COLUMN("c", "CompanyName").AS("Company")
.COLUMN("c", "ContactName").AS("Contact")
.COLUMN("c", "ContactTitle")
.FROM("dbo", "Customers", "c")
.WHERE("@orgLevel").IsEqualTo()
.CASE("c", "ContactTitle")
.WHEN("Owner").THEN("Owner")
.WHEN("Accounting Manager").THEN("Management")
.WHEN("Marketing Manager").THEN("Management")
.WHEN("Sales Manager").THEN("Management")
.ELSE("Employee")
.END()
.Build()
;
Console.WriteLine(sql);
Output:
Contains an example of using ad hoc SQL Scripts documented here
DECLARE @orgLevel AS VARCHAR(50)
SET @orgLevel = 'Management'
SELECT
[c].[CustomerID],
[c].[CompanyName] AS [Company],
[c].[ContactName] AS [Contact],
[c].[ContactTitle]
FROM [dbo].[Customers] c
WHERE 1=1
AND @orgLevel = CASE [c].[ContactTitle]
WHEN 'Owner' THEN 'Owner'
WHEN 'Accounting Manager' THEN 'Management'
WHEN 'Marketing Manager' THEN 'Management'
WHEN 'Sales Manager' THEN 'Management'
ELSE 'Employee'
END