日期:2014-05-18  浏览次数:20585 次

神仙问我的题,做出来了,给野蛮人试试。
Declare   @tb   Table   (col1   varchar(5))
insert   @tb   values( 'a ')
insert   @tb   values( 'b ')
insert   @tb   values( 'c ')
insert   @tb   values( 'c ')
insert   @tb   values( 'd ')

/*要得到这种结果,但不能用   Case   When,写另一语句*/
Select   *,(case   when   col1   =   'c '   then   '9 '   else   '8 '   end)   from   @tb        

/*另外:啥时喝酒啊?   */

------解决方案--------------------
可以加中间表吗?

Declare @tb Table (col1 varchar(5))
insert @tb values( 'a ')
insert @tb values( 'b ')
insert @tb values( 'c ')
insert @tb values( 'c ')
insert @tb values( 'd ')

/*要得到这种结果,但不能用 Case When,写另一语句*/
Select *,(case when col1 = 'c ' then '9 ' else '8 ' end) from @tb


declare @tb2 table(col1 varchar(5),col2 int)
insert @tb2 select 'c ',9

select t1.*,isnull(t2.col2,8) from @tb t1 full join @tb2 t2 on t1.col1=t2.col1 order by t1.col1

------解决方案--------------------

Declare @tb Table (col1 varchar(5))
insert @tb values( 'a ')
insert @tb values( 'b ')
insert @tb values( 'c ')
insert @tb values( 'c ')
insert @tb values( 'd ')

/*要得到这种结果,但不能用 Case When,写另一语句*/
Select *,(case when col1 = 'c ' then '9 ' else '8 ' end) from @tb

Select b.col1,isnull(a.a,8) from @tb b left join
(select 'c ' col1 ,9 a) a on a.col1= b.col1


。。。比水王慢了~
------解决方案--------------------
Declare @tb Table (col1 varchar(5))
insert @tb values( 'a ')
insert @tb values( 'b ')
insert @tb values( 'c ')
insert @tb values( 'c ')
insert @tb values( 'd ')

/*要得到这种结果,但不能用 Case When,写另一语句*/

---不知道这个行么?
select *,isnull((select top 1 '9 ' from @tb where t.col1= 'c '),8) from @tb t
------解决方案--------------------
select *,ascii(isnull(nullif(col1, 'c '), 'z '))/122+8 from @tb
这个算不算?
------解决方案--------------------
select *, isnumeric(replace(col1, 'c ', '9 '))+8 from @tb