Why doesn’t this work?
DECLARE @temp table
(ShipNo int,
Supplier varchar(10)
)
INSERT INTO @temp VALUES (1,'CFA')
INSERT INTO @temp VALUES (1, 'TFA')
INSERT INTO @temp VALUES (2, 'LRA')
INSERT INTO @temp VALUES (2, 'LRB')
INSERT INTO @temp VALUES (3, 'ABC')
INSERT INTO @temp VALUES (4, 'TFA')
Declare @OrderBy varchar(255)
sET @OrderBy = 'Supplier'
SELECT ROW_NUMBER() OVER (ORDER BY
CASE @OrderBy
WHEN 'Supplier' THEN Supplier
WHEN 'ShipNo' THEN ShipNo
END
) AS RowNo,
ShipNo,
Supplier
FROM @temp
But if you cast the ShipNo to a varchar in the Case statement it DOES work?
I am aware that this is old post but this is for any one who tumbles upon this issue and is looking for a solution:
basically you are putting each field in its own case. Do this only when their data type or value inside field differs for both the columns or when you are getting error such as
conversion failed when trying to convert int to varchar or varchar to int..