Case Clause

OQL.Delphi supports the Case clause of SQL-92.  

l  Simple Case clause:

var

  query : ISelectQuery;

  aCASE : ICaseExpression;

begin

  aCASE := OQL

    .Case_(NW.Order.ShipCountry)

      .When('China').Then_('cn')

      .When('United States').Then_('us')

      .When('United Kingdom').Then_('uk')

      .Else_('com')

    .End_();

 

  query := TSelectQuery.Create;

  query

  .Select(NW.Order.OrderID)._(NW.Order.OrderDate)

    ._(NW.Order.RequiredDate)._( aCASE )

  .From(NW.Order)

  .Where( OQL

    .Criteria(NW.Order.EmployeeID).EQ(5)

    .And_(NW.Order.ShipVia).EQ(1) );

end;

== Equal to the following SQL [MS SQL Server] ==

SELECT

  [Orders].[OrderID] , [Orders].[OrderDate] , [Orders].[RequiredDate] ,

  (

    CASE

      [Orders].[ShipCountry]

      WHEN 'China'

        THEN 'cn'

      WHEN 'United States'

        THEN 'us'

      WHEN 'United Kingdom'

        THEN 'uk'

      ELSE

        'com'

    END

  )

FROM [Orders]

WHERE

  [Orders].[EmployeeID] = 5 AND

  [Orders].[ShipVia] = 1

l  Complicated Case clause:

var

  query : ISelectQuery;

  aCASE : ICaseExpression;

begin

  aCASE := OQL

    .Case_()

      .When(OQL.Criteria(NW.Order.ShipCountry).EQ('China'))

.Then_('''cn''')

      .When(OQL.Criteria(NW.Order.ShipCountry).EQ('United States')).Then_('''us''')

      .When(OQL.Criteria(NW.Order.ShipCountry).EQ('United Kingdom')).Then_('''uk''')

      .Else_('''com''')

    .End_();

 

  query := TSelectQuery.Create;

  query

  .Select(NW.Order.OrderID)._(NW.Order.OrderDate)

    ._(NW.Order.RequiredDate)._( aCASE )

  .From(NW.Order)

  .Where( OQL

    .Criteria(NW.Order.EmployeeID).EQ(5)

    .And_(NW.Order.ShipVia).EQ(1) );

end;

== Equal to the following SQL [MS SQL Server] ==

SELECT

  [Orders].[OrderID] , [Orders].[OrderDate] , [Orders].[RequiredDate] ,

  (

    CASE

      WHEN

        [Orders].[ShipCountry] = 'China'

        THEN 'cn'

      WHEN

        [Orders].[ShipCountry] = 'United States'

        THEN 'us'

      WHEN

        [Orders].[ShipCountry] = 'United Kingdom'

        THEN 'uk'

      ELSE

        'com'

    END

  )

FROM [Orders]

WHERE

  [Orders].[EmployeeID] = 5 AND

  [Orders].[ShipVia] = 1

 

 

 

Related Topics

OQL.Delphi Tutorial