2014-05-12 215 views
0

我有以下查询,其中TOTAL_AMOUNT十进制数据类型和INVOICE_NOVARCHAR数据类型。SQL案例声明

第一个查询正常工作。但第二个查询会导致错误,如Error converting data type varchar to numeric.

如果我转换TOTAL_AMOUNTVARCHAR,它排序像为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

回答了SO次负荷。请搜索! –

回答

0

要在需要多于一个case表达,一个用于每个数据类型不同的数据类型动态地排序:

ORDER BY 
    CASE @sort 
    WHEN '1' THEN TOTAL_AMOUNT 
    END, 
    CASE @sort 
    WHEN '2' THEN INVOICE_NO 
    END 
-2

您的查询完美地为我工作,并根据列排序ü给予..如果你可以共享整个查询,我可以 试试看。

其他你可以尝试这样的

SELECT * 
FROM TRN_INVOICE 
ORDER BY CASE '2' 
      WHEN '1' THEN TOTAL_AMOUNT 
      WHEN '2' THEN CAST(INVOICE_NO as decimal) 
     END