【问题标题】:Converting multiple rows through cast function in SQL通过 SQL 中的强制转换函数转换多行
【发布时间】:2019-02-15 11:41:42
【问题描述】:

我有一个database table,其中nameaddressmonthly account expense 作为每个月的列信息。

我想将accounts 表的month1 的费用添加到month12 数据,但它属于varchar 数据类型,我想将其转换为float 数据类型并使用逻辑表达式在获取所有费用的SUM 的查询中(month 1 + month 2 +...month12)应该大于10,000

但我无法解决这个问题,因为查询不起作用并且出现错误

请检查此查询并让我知道任何更改

选择名称 ,地址 ,CAST(([month1] + [month2]...[month12] AS float) AS '总费用' FROM Accounts_Table WHERE name LIKE 'a%' GROUP BY 姓名、地址、“总费用” 拥有“总费用”> 10000

一些指针可以很好地解决这个问题。

【问题讨论】:

    标签: sql-server type-conversion sql-server-2014 sqldatatypes sql-query-store


    【解决方案1】:

    您添加和转换month 列的方式不正确。

    此外,您将无法在声明它的同一查询的 HAVING 子句中调用 [Total Expense] 的别名。使用SUBQUERY

    见下文。

    选择 [名称] ,[地址] ,[总费用] 从 ( 选择 [名称] ,[地址] ,CAST([month1] AS 浮动) + CAST([month2] AS 浮动) + CAST([month3] AS 浮动) + CAST([month4] AS 浮动) + CAST([month5] AS 浮动) + CAST([month6] AS 浮动) + CAST([month7] AS 浮动) + CAST([month8] AS 浮动) + CAST([month9] AS 浮动) + CAST([month10] AS 浮动) + CAST([month11] AS 浮动) + CAST([month12] AS float) AS [总费用] FROM [Accounts_Table] WHERE [name] LIKE 'a%') AS [src] 按 [名称] 分组 ,[地址] ,[总费用] 有 [总费用] > 10000

    【讨论】:

    • 感谢@CurseStacker
    【解决方案2】:

    在添加之前,您必须将每个 varchar 列转换为 Float。 看看解释

    , (CAST( [month1] as float) + CAST([month2] as float)... CAST([month12] as Float))  AS 
       'total expense'
    

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多