• This is how example 2 can be reworked with a CASE function in the ORDER BY clause that properly sorts by the datetime field:

    DECLARE @column varchar(10)

    SET @Column = 'title'

    SELECT EmployeeID,

    CASE @column

    WHEN 'Name' THEN LastName

    WHEN 'Title' THEN Title

    ELSE LastName

    END AS Column1,

    CASE @column

    WHEN 'Name' THEN FirstName

    WHEN 'Title' THEN LastName

    ELSE CAST(BirthDate as varchar(20))

    END AS Column2,

    CASE @column

    WHEN 'Title' THEN CAST(HireDate as varchar(20))

    ELSE ''

    END AS Column3, HireDate

    FROM employees

    ORDER BY CASE @column WHEN 'Title' THEN

    LTRIM(STR(DATEPART(yyyy,HireDate)))

    + CASE LEN(LTRIM(STR(DATEPART(mm,HireDate)))) WHEN 1 THEN '0' + LTRIM(STR(DATEPART(mm,HireDate)))

    ELSE LTRIM(STR(DATEPART(mm,HireDate))) END

    + CASE LEN(LTRIM(STR(DATEPART(dd,HireDate)))) WHEN 1 THEN '0' + LTRIM(STR(DATEPART(dd,HireDate)))

    ELSE LTRIM(STR(DATEPART(dd,HireDate))) END

    WHEN 'Name' THEN FirstName END

    The could you would need to adapt to your datetime columns is this:

    LTRIM(STR(DATEPART(yyyy,HireDate)))

    + CASE LEN(LTRIM(STR(DATEPART(mm,HireDate)))) WHEN 1 THEN '0' + LTRIM(STR(DATEPART(mm,HireDate)))

    ELSE LTRIM(STR(DATEPART(mm,HireDate))) END

    + CASE LEN(LTRIM(STR(DATEPART(dd,HireDate)))) WHEN 1 THEN '0' + LTRIM(STR(DATEPART(dd,HireDate)))

    ELSE LTRIM(STR(DATEPART(dd,HireDate))) END

    This would come after the THEN keyword, simply change the column name to the one you plan to use.

    Robert Marda

    Robert W. Marda
    Billing and OSS Specialist - SQL Programmer
    MCL Systems