选择案例中的错误

时间:2018-06-18 10:24:04

标签: sql sql-server tsql case

有人可以告诉我他们能看到的是下面代码中的问题吗?

--Query for DC Allocated Stock - Qty & Values
-------------------------------------------

    Declare @Brand varchar(50),
        @Div varchar(50),
        @Dept varchar(50),
        @Store varchar(50),
        @StyleOrSKU varchar(50)


    Set @Brand = 'TestProduct' --Test criteria
    set @Div = ''
    Set @Dept = ''
    set @Store = ''
    set @StyleOrSKU = ''

首先查询,表格Qry_1_DCSOH - 手头退还库存数量

SELECT Brand, 
       CASE 
         WHEN Brand = @Brand THEN sum(AllocStockQty)
         WHEN Division = @Div THEN sum(AllocStockQty)
         WHEN Department = @Dept THEN sum(AllocStockQty)
         WHEN Store = @Store THEN sum(AllocStockQty)
         WHEN StyleOrSKU = @StyleOrSKU THEN sum(AllocStockQty)
         ELSE 'NoMatch' 
      END as [Allocated Stock Qty]
FROM Qry_2_DCAllocStock 
GROUP BY Brand, Division, Department, Store, StyleOrSKU

我得到的错误是Msg 8114,Level 16,State 5,Line 20 将数据类型varchar转换为float时出错。

但我真的不确定问题出在哪里 - 请协助。

3 个答案:

答案 0 :(得分:0)

You have varchar(50) types.. and it seems the from clause is returning some numeric values.

Cast the When clauses to var char or use the returned types on the variables.

答案 1 :(得分:0)

错误在于您尝试使用else选项强制使用具有浮动值的计算表达式的无数值。 它可以这样纠正:

""

答案 2 :(得分:0)

您正在CASE中混合使用数据类型。

return type of CASE is

  

...来自类型集的最高优先级类型   result_expressions和可选的else_result_expression。

您的示例中的highest precedence类型为float

更改else结果的类型或将sum结果转换为某种char类型。