Access数据库: 表: 订单名称 数量 单价 ...
A 1支 1.00 ...
B 20个 2.00 ...
...子查询: "SELECT 名称, Sum(Val(数量)*Val(单价)) AS 金额 FROM 订单 GROUP BY 名称" 用于诸多LEFT JOIN和RIGHT JOIN操作                      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''转换到SQL Server 2000数据库: 问题出现: Val函数名不可识别, 用CAST数据类型无法转换在不修改表结构的情况下, 有没有什么好办法?

解决方案 »

  1.   

    "SELECT 名称, Sum(数量*单价) AS 金额 FROM 订单 GROUP BY 名称"
    sql语句内是没有val函数的
      

  2.   

    数量是1支,20个,用CAST数据类型无法转换(这是显式转换)楼上大概没细看,数量*单价是隐式转换,不行的Access用Val没问题的
      

  3.   

    字段“数量”与“单价”应该为float型的吧,所以不可能有“1支”的,应该是“1”
      

  4.   

    如果你的数量字段的量词(只,个等)都是一个汉字,那倒比较容易,只需把最后
    那个汉字去掉(SUBSTRING),再CAST就行了.如果有多个汉字,愚以为一个SQL语句
    恐怕搞不定的,只有写SP(通过Charindex判断)来处理了.
      

  5.   

    如果量词有多个汉字的情况,建议使用CASE WHEN和ISNUMERIC相结合,一个
    SQL应该可以处理.(这个CASE WHEN用来判断右边1.2.3...等位是否是数字,
    来处理)
      

  6.   

    感谢各位老大的宝贵意见!CREATE FUNCTION Val (@s nvarchar(128))  
    RETURNS float
    BEGIN 
    DECLARE @v float
    DECLARE @n int
    DECLARE @t nvarchar(128)
     
    SET @v = 0
    SET @n = LEN(@s)
    SET @t = ''

    WHILE (@n > 0)
    BEGIN
    SET @t = SUBSTRING(@s,1,@n)
    IF ISNUMERIC(@t) = 1 
    BEGIN
    SET @v = CAST(@t AS float)
    BREAK 
    END
    SET @n = @n - 1
    END RETURN(@v)
    END