4

我要前言,不是我写的。我今天早些时候继承了它,我一直在努力寻找解决方案。下面的代码库有效 - 除了每平方英尺的成本以 Alpha 顺序而不是数字返回。

SELECT 
  CTE.Suite, CTE.Building, CS.Address, CS.City, CS.State, CTE.Tenant,
  CTE.AverageCharges, CTE.SQFT, CTE.CostSQFT, CTE.TenantType
FROM cteInvoices as CTE
   ...
ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite
       WHEN 'Cost' THEN cast(CTE.costSQFT as varchar)
  END

我将最终情况更改为以下内容:

 ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite
       WHEN 'Cost' THEN CTE.costSQFT
   END

这固定了成本排序,但是,当我选择按套件排序时,我得到:

  Msg 8114, Level 16, State 5, Procedure rCostSQFTcsort, Line 17
  Error converting data type varchar to numeric.

我晚上大部分时间都在处理这个问题,但我似乎没有做任何事情来解决它——如果有的话,它会使事情变得更糟。我希望第二双眼睛可以对这个问题有所了解。

4

1 回答 1

7

如果它们不能转换为相同的类型,您可能需要将它们分成两个单独的子句。原因是它CASE是一个返回单一数据类型值的表达式,并且所有潜在选项所呈现的数据类型必须是可转换的。如果没有ELSENULL返回,因此它将对该“分支”的所有行进行相同的排序:

 ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite END,
  CASE @Order
       WHEN 'Cost' THEN CTE.costSQFT END;

您可能可以显式转换其中之一,但这可能会改变其含义(例如,您可能仍想在之后11.0排序,并且将两者都转换为字符串不会这样做。 9.0

于 2012-09-19T23:11:10.347 回答