各位老师下面是我的一个查询语句SELECT  MAX(CASE WHEN 类别 = '老师' THEN 工资小计 ELSE '' END) AS 老师,
FROM (select 类别,sum(工资) as 工资小计 from GZ..myGZ group by 类别) as a
“工资”如果是float类型,就能够通过,如果是money类型就总是提示“不允许从数据类型 varchar 到 money 的隐性转换。请使用 CONVERT 函数来运行此查询。”我试图用它的提示做修改,但没有成功,请帮忙解释一下,到底是什么问题,我该怎么改,前提是一定要使用money类型

解决方案 »

  1.   

    SELECT
     MAX(CASE WHEN 类别 = '老师' THEN ltrim(工资小计) ELSE '' END) AS 老师,
    FROM
     (select 类别,sum(工资) as 工资小计 from GZ..myGZ group by 类别) as a
      

  2.   


    declare @myGZ table 
    (类别 varchar(4),工资 money,col1 varchar(1),col2 varchar(1))
    insert into @myGZ
    select '老师',5,'a','f' union all
    select '老师',7,'d',null union all
    select '老师',9,'n','d' union all
    select '学生',1,'g','s' union all
    select '学生',4,'b',null union all
    select '学生',5,'k','m'SELECT 
    MAX(CASE WHEN 类别 = '老师' THEN 工资小计 ELSE '' END) AS 老师  --这里多了个逗号
    FROM (select 类别,sum(工资) as 工资小计 from @myGZ group by 类别) as a
    /*
    老师
    ---------------------
    21.00
    */
      

  3.   


    --直接求和不是一样吗?不需要嵌套
    declare @myGZ table 
    (类别 varchar(4),工资 money,col1 varchar(1),col2 varchar(1))
    insert into @myGZ
    select '老师',5,'a','f' union all
    select '老师',7,'d',null union all
    select '老师',9,'n','d' union all
    select '学生',1,'g','s' union all
    select '学生',4,'b',null union all
    select '学生',5,'k','m'SELECT [老师]=sum(CASE WHEN 类别 = '老师' THEN 工资 ELSE '' END) FROM @myGZ
    /*
    老师
    ---------------------
    21.00
    */
      

  4.   


    SELECT
     MAX(CASE WHEN 类别 = '老师' THEN 工资小计 ELSE 0.00 END) AS 老师,
    FROM
     (select 类别,sum(工资) as 工资小计 from GZ..myGZ group by 类别) as a