这个为什么提示语法异常

这个为什么提示语法错误?selectxmbh,xmmc,cast(fbsjasvarchar)FROMtdcrjbxxWHERE(iffb1 )unionall(select

这个为什么提示语法错误?
select   xmbh,   xmmc,   cast(fbsj   as   varchar)   FROM   tdcrjbxx   WHERE   (iffb   =   '1 ')  
union   all  
(select   CAST(id   AS   VARCHAR(50))   xmbh,title   xmmc,addtime   fbsj   FROM   tdjy_news   where   cataid=13)

上面的没有错

但是这样就报错了

select   *   from  
(
select   xmbh,   xmmc,   cast(fbsj   as   varchar)   FROM   tdcrjbxx   WHERE   (iffb   =   '1 ')  
union   all  
(select   CAST(id   AS   VARCHAR(50))   xmbh,title   xmmc,addtime   fbsj   FROM   tdjy_news   where   cataid=13)
)

WHY?

[解决办法]
select * from
(
select xmbh, xmmc, cast(fbsj as varchar) as col1 FROM tdcrjbxx WHERE (iffb = '1 ')
union all
(select CAST(id AS VARCHAR(50)) xmbh,title xmmc,addtime fbsj FROM tdjy_news where cataid=13)
) t
[解决办法]
cast(fbsj as varchar) fbsj