【问题标题】:Error in Select Case选择案例中的错误
【发布时间】:2023-03-19 04:40:01
【问题描述】:

有人能告诉我他们能看出下面代码中的问题吗?

--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 转换为浮点数时出错。

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

【问题讨论】:

  • 那是什么语言?你能调整你的问题的标签吗?
  • 我猜这是 SQL。指定第 20 行对您会有所帮助,但错误消息很确定您正在尝试使 varchar 数据类型等同于某处的浮点数。
  • 抱歉,这是 SQL
  • 格式化、语法

标签: sql sql-server tsql case


【解决方案1】:

你有 varchar(50) 类型。似乎 from 子句返回了一些数值

将 When 子句转换为 var char 或在变量上使用返回的类型。

【讨论】:

    【解决方案2】:

    错误是您试图使用 else 选项对已经具有浮点值的计算表达式强制一个非数值。 可以这样改正:

    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 0 
      END as [Allocated Stock Qty]
    FROM Qry_2_DCAllocStock 
    GROUP BY Brand, Division, Department, Store, StyleOrSKU
    

    【讨论】:

    • 感谢大家的帮助 - 解决了!
    【解决方案3】:

    您在 CASE 中混合了数据类型。

    return type of CASE is:

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

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

    要么更改 else 结果的类型,要么将总和结果转换为某种 char 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多