日期:2014-05-19  浏览次数:20395 次

case出错误,急!
--查询下面语句报错:从数据类型   nvarchar   转换为   float   时出错。

declare   @temp   table(company   nvarchar(50),account   nvarchar(50),keyword   nvarchar(50),cost   float)
insert   into   @temp(company,account,keyword,cost)   values( 'a ', 'r ', 'u ',1.0)
insert   into   @temp(company,account,keyword,cost)   values( 'b ', 't ', 'i ',2.0)
insert   into   @temp(company,account,keyword,cost)   values( 'c ', 'y ', 'o ',1.3)
declare   @dir   nvarchar(10),@para   nvarchar(50)
select   @dir= 'desc ',@para= 'company '
select   company,account,keyword,cost   from   @temp
order   by   case   @dir
when   'desc '   THEN   CASE   @para  
when   'company ' then   company
when   'account ' then   account
when   'keyword ' then   keyword
when   'cost ' then   cost
end
  end   desc,
  case   @dir  
when   'asc '   THEN   CASE   @para  
when   'company ' then   company
when   'account ' then   account
when   'keyword ' then   keyword
when   'cost ' then   cost
end
  end   ,
case   @dir
when   '0 '   then   1
end/**/

------解决方案--------------------
晕,这么处理

declare @temp table(company nvarchar(50),account nvarchar(50),keyword nvarchar(50),cost float)
insert into @temp(company,account,keyword,cost) values( 'a ', 'r ', 'u ',1.0)
insert into @temp(company,account,keyword,cost) values( 'b ', 't ', 'i ',2.0)
insert into @temp(company,account,keyword,cost) values( 'c ', 'y ', 'o ',1.3)
declare @dir nvarchar(10),@para nvarchar(50)
select @dir= 'desc ',@para= 'company '
select company,account,keyword,cost from @temp
order by case @dir
when 'desc ' THEN CASE @para
when 'company ' then company
when 'account ' then account
when 'keyword ' then keyword
else ' '
end
end desc,
case when @dir= 'desc ' and @para = 'cost ' then cost
else 0
end desc,
case @dir
when 'asc ' THEN CASE @para
when 'company ' then company
when 'account ' then account
when 'keyword ' then keyword
else ' '
end
end ,
case when @dir= 'asc ' and @para = 'cost ' then cost
else 0
end