怎么写SQL语句?

zb1119 2004-09-20 06:28:19
表A有3条记录,ID字段分别是1,3,5
表B有3条记录,ID字段分别是2,4,6

分别执行SELECT(不用联合查询,因为其它字段不一样)
我想输出时安升序排序,就是1,2,3,4,5,6这个顺序
怎么写SQL语句?????????????????????????????


我的思路是做个临时表,我个人感觉应该建立 一个临时表,用游标把这些数据都放到临时表中,到时候一取纪录order by就可以了。

临时表字段应该是
ID(以及表中重复的字段) 表A不一样的字段 表B不一样的字段
不过我写不出来SQL.

各位有什么好的主意?写出来看看?
...全文
113 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
heibai520 2004-09-20
  • 打赏
  • 举报
回复
我也来学学~~呵呵。。
zb1119 2004-09-20
  • 打赏
  • 举报
回复
狂晕,我建表都没完,邹大哥那边答案都出来了!我这就试试。
zjcxc 元老 2004-09-20
  • 打赏
  • 举报
回复
--或者是动态的处理

--测试数据
create table ta(id int,name varchar(10),sex varchar(10))
insert ta select 1,'张三','男'
union all select 1,'张三','女'
union all select 2,'张三','女'

create table tb(id int,name varchar(10),age int)
insert tb select 1,'张三',10
union all select 2,'张三',30
union all select 3,'张三',40
go

--查询(从系统表取字段名,这样你可以任意修改两个表的字段来测试)

--定义查询参数
declare @tb1 sysname,@tb2 sysname
select @tb1='ta',@tb2='tb' --要查询ta,tb两个表

--生成处理语句
declare @s1 varchar(8000),@s2 varchar(8000)
select @s1='',@s2=''
select @s1=@s1+','+a,@s2=@s2+','+b
from(
select top 100 percent
a=case
when a.name is null then '['+b.name+']='''''
else '['+a.name+']' end,
b=case
when b.name is null then '['+a.name+']='''''
else '['+b.name+']' end
from(
select name from syscolumns where id=object_id(@tb1)
)a full join(
select name from syscolumns where id=object_id(@tb2)
)b on a.name=b.name
order by case a.name when b.name then 0 else 1 end,b.name
)a
select @s1=stuff(@s1,1,1,''),@s2=stuff(@s2,1,1,'')
exec('
select '+@s1+' from ['+@tb1+']
union all
select '+@s2+' from ['+@tb2+']
order by id --因为楼主有个order by id,所以要求查询的两个表中都要有id字段
')
go

--删除测试
drop table ta,tb

/*--测试结果

id name sex age
----------- ---------- ---------- -----------
1 张三 男 0
1 张三 女 0
1 张三 10
2 张三 30
2 张三 女 0
3 张三 40
--*/
WangZWang 2004-09-20
  • 打赏
  • 举报
回复
Select * from (
select id from A
union all
Select id from B) as C
order by id
zb1119 2004-09-20
  • 打赏
  • 举报
回复
把测试的表纪录写好。


create table A(ID int);
create table B(ID int)




insert into a values (1)
insert into a values (3)
insert into a values (5)


insert into b values (2)
insert into b values (4)
insert into b values (6)

drop table a;
drop table b;
zjcxc 元老 2004-09-20
  • 打赏
  • 举报
回复
--示例

declare @a table(id int,name varchar(10),sex varchar(10))
insert @a select 1,'张三','男'
union all select 1,'张三','女'
union all select 2,'张三','女'

declare @b table(id int,name varchar(10),age int)
insert @a select 1,'张三',10
union all select 2,'张三',30
union all select 3,'张三',40

--查询
select id,name,sex,age=0
from @a
union all
select id,name,sex='',age
from @b
order by id

/*--测试结果

id name sex age
----------- ---------- ---------- -----------
1 张三 男 0
1 张三 女 0
1 张三 10 0
2 张三 30 0
2 张三 女 0
3 张三 40 0

(所影响的行数为 6 行)
--*/
WangZWang 2004-09-20
  • 打赏
  • 举报
回复
把你的要显示的结果及字段等一些贴出来看看.
zjcxc 元老 2004-09-20
  • 打赏
  • 举报
回复
表中的字段不同?

这样写也行啊

select id,相同的字段列表,仅表A存在的字段列表,仅表B存在的字段列表(用字段名=0的形式)
from 表A
union all
select id,相同的字段列表,仅表A存在的字段列表(用字段名=0的形式),仅表B存在的字段列表
from 表B
order by id

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧