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

请问通过union联合两条Select语句后的排序问题?
请问,如果表A和表B的字段是相同的,
但唯一的是表A的a字段是int型的,而表B的a字段是nvarChar型的;
要联合查询这两个表(select   from   A   union   select   from   B)
而且要通过a字段进行整型排序,该怎么处理?

我用:select   a,a1,a2   from   A
            union    
            select   a,a1,a2   from   B
            order   by     a
时,出错:“将   varchar   值转换为数据类型为   int   的列时发生语法错误。”

如果:select   a=convert(char,a),a1,a2   from   A
            union    
            select   a=convert(char,a),a1,a2   from   B
            order   by     a
时,是可以,但是按字符排序的。

如果用分开查询却不符合设计要求,现急中。。。

------解决方案--------------------
declare @ta table(a int,a1 nvarchar(10),a2 nvarchar(10))
insert @ta
select 1, 'x ', 'y ' union all
select 2, 'x ', 'y ' union all
select 3, 'x ', 'y '
declare @tb table(a nvarchar(10),a1 nvarchar(10),a2 nvarchar(10))
insert @tb
select '4 ', 'x ', 'y ' union all
select '5 ', 'x ', 'y ' union all
select '6 ', 'x ', 'y '

select a,a1,a2 from @ta
union all
select cast(a as int),a1,a2 from @tb order by a DESC

/*结果
a a1 a2
----------- ---------- ----------
6 x y
5 x y
4 x y
3 x y
2 x y
1 x y
*/

------解决方案--------------------
当 表B 的 a 列包括 'w4 '这样的字符时怎么能安照整型排序呢?
或者你是有别的要求?