我有以下查询,其中 TOTAL_AMOUNT 是十进制数据类型,而 INVOICE_NO 是 varchar 数据类型。
First Query正常工作。但是第二个查询导致错误为Error converting data type varchar to numeric.
。
如果我将 TOTAL_AMOUNT 转换为 varchar ,则会将其排序为 nvarchar 。但我需要排序为十进制。帮助我找到正确的解决方案。
1)
SELECT *
FROM TRN_INVOICE
ORDER BY CASE '1'
WHEN '1' THEN TOTAL_AMOUNT
WHEN '2' THEN INVOICE_NO
END
2)
SELECT *
FROM TRN_INVOICE
ORDER BY CASE '2'
WHEN '1' THEN TOTAL_AMOUNT
WHEN '2' THEN INVOICE_NO
END
答案 0 :(得分:0)
要动态排序不同的数据类型,您需要多个case
表达式,每种数据类型对应一个:
ORDER BY
CASE @sort
WHEN '1' THEN TOTAL_AMOUNT
END,
CASE @sort
WHEN '2' THEN INVOICE_NO
END
答案 1 :(得分:-2)
您的查询对我来说非常合适,并根据您给出的列进行排序..如果您可以分享整个查询,我可以尝试一下。
否则你可以尝试这样
SELECT *
FROM TRN_INVOICE
ORDER BY CASE '2'
WHEN '1' THEN TOTAL_AMOUNT
WHEN '2' THEN CAST(INVOICE_NO as decimal)
END