STL*_*jun 4 sql sql-server stored-procedures
我想序言,我没有写这个.我今天早些时候继承了它,我一直在努力寻找解决方案.下面的代码库可以工作 - 除了每平方英尺成本以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
Run Code Online (Sandbox Code Playgroud)
我将最终案例更改为以下内容:
ORDER BY
CASE @Order
WHEN 'Suite' THEN CTE.Suite
WHEN 'Cost' THEN CTE.costSQFT
END
Run Code Online (Sandbox Code Playgroud)
这修复了成本排序,但是,当我选择按套件排序时,我得到:
Msg 8114, Level 16, State 5, Procedure rCostSQFTcsort, Line 17
Error converting data type varchar to numeric.
Run Code Online (Sandbox Code Playgroud)
我整个晚上大部分时间都在努力工作,而我似乎没有做任何事情来修复它 - 如果有什么事情会让事情变得更糟.我希望第二眼可能会对这个问题有所了解.
如果那些不可转换为相同类型,您可能需要将它们分成两个单独的子句.原因是,CASE该表达式返回单个数据类型的值,并且所有潜在选项提供的数据类型必须是可转换的.如果没有ELSE则NULL返回,那么它将为该"分支"命令所有行相同:
ORDER BY
CASE @Order
WHEN 'Suite' THEN CTE.Suite END,
CASE @Order
WHEN 'Cost' THEN CTE.costSQFT END;
Run Code Online (Sandbox Code Playgroud)
它可能会,你可以显式地转换其中的一个,但是这可能会改变它的意义(例如,你可能仍然要11.0进行排序后 9.0,都转换成字符串不会那么做的.
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |