按顺序排序的SQL案例声明

时间:2014-05-12 09:39:42

标签: sql

我有以下查询,其中 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

2 个答案:

答案 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