SQL CASE Function
A CASE function requires at least one WHEN clause.
CASE Function
CASE is a complex function that has two forms; the simple-when form and the searched-when form. In either form CASE returns a result, the value of which controls the path of subsequent processing.
>>-CASE--view--+-simple WHEN clause----+--AS-------> |-searched WHEN clause | >---+-ELSE NULL -------------+------END-------------------+--->< |-ELSE result expression | simple-when-clause |--source_value-------------------------------------------------> .-------------------------------------------. V | >----WHEN --test_value--THEN--+-result_value-+-+----------------| '-NULL---------' searched-when-clause .-------------------------------------------------. V | |----WHEN --search_condition--THEN--+-result_value-+-+----------| '-NULL---------'
ELSE is optional. The default ELSE expression is NULL. A CASE expression is delimited by END. The test values do not have to be literal values. The searched-when form is similar, but has the additional flexibility of allowing a number of different values to be tested.
Exec SQL Create Table QTemp/Temp1 As ( Select DAc4, DDAlph, YR, Period, DAcct1, DAcct2, DAcct3, DAcct4, DxRef1, DxRef2, DxRef3, Cast( Case When ( DAcct1 Between '41000' And '41999' ) Then Sum( DDValu ) Else 0 End As Dec( 13, 2 )) As Amount_41, Cast( Case When ( DAcct1 Between '51000' And '51999' ) Then Sum( DDValu ) Else 0 End As Dec( 13, 2 )) As Amount_51 From QTemp/Temp Group By DAc4, DDAlph, YR, Period, DAcct1, DAcct2, DAcct3, DAcct4, DxRef1, DxRef2, DxRef3 Order By DAc4, DDAlph ) Definition Only;
Note in the example, the CASE function is used inside a CAST function. The CASE WHEN is in the form of a searched clause, using an aggregate function (SUM) in the expression.
The CASE function can also be used in a SELECT statement. The example snippett demonstrates the function selecting a row column to use to supply a value based on the WHEN test.
Report_Data As ( Select a.el1, a.el3, b.VAT, Case When ( b.federaltax = ' ' ) Then b.socialSec Else b.federaltax End As txRef1, a.Amount From Unmatched_Summary a Join oas_elmTaxes b On a.el3 = b.elmcode Where a.Amount >= 600 and b.elmLevel = 3 And b.Vat In ( ' ', 'I' ) And b.cmpcode = :dftcomp ),