请问,比如我查询出2个记录集:
记录集:T1:
记录集:T2:
如何用简单的sql实现合并成如下效果?
有朋友在问,为什么会有此需求,我解释一下起因吧
比如我有一个xml文本如下:
<Name>name1</Name> <Age> 30</Age> <Name>name2</Name> <Age> 20</Age> <Name>name3</Name> <Age> 10</Age>
我用想解析成table 如下:
Name Age
---------------------
name1 30
name2 20
name3 10
我先使用:
select c.value('(.)','nvarchar(10)') as Name from @xml.nodes('/Name') t(c)
得到了:
Name -------———— name1 name2 name3
然后再用:
select c.value('(.)','nvarchar(10)') AS Age from @xml.nodes('/Age') t(c)
Age ---------- 30 20 10
而现在,我想得到:
Name Age ------------------ name1 30 name2 20 name3 10
所以有上面的问题
这两个表有关联嘛?
无关联
@lane3000:
然后union 就可以了 (我没试...)
@Cgrain: id列如何得到?不可用row_number,因为要order,一旦order了,顺序就变了,就错乱了
@lane3000:
select id=IDENTITY(int,1,1), a.name as name into tests from a
这样估计可以。
select t1.*,t2.* from
(select *, rownumer() as id from t1) t1
left join
(select *, rownumer() as id from t2)
on t1.id=t2.id
差不多伪代码这样子
好像只能这样了,构造出一个相同的字段,然后连接...
SELECT A1.id,B1.id
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY userName ) id
FROM S_UserLogInfo
) A1
FULL JOIN ( SELECT ROW_NUMBER() OVER ( ORDER BY sex ) id
FROM B_User
) B1 ON A1.id = B1.id
@Cgrain:
S_UserLogInfo, B_User 没有关联字段么... 感觉你这个查出来join的数据么有业务意义呀...
@czd890: 我随便拿的表~~~~ 要实现上面的这种操作,除了rownumber ,没想到其它的了,union试了一下,可是可以,但是数据关联不上~~~~
你这段sql语句会炸,他表没有任何关联关系比较神奇
@Cgrain: 你用row_number 一旦order之后可能顺序就不一样了
用临时表实现此功能,亲测可用:
create table #Temp1 ( id int ) create table #Temp2 ( name varchar(100) ) insert into #Temp1 (id) select 1; insert into #Temp2 (name) select 'zhangsan'; select * from #Temp1, #Temp2;
你这两个表的数据只有一条,如果多条就交叉了
@lane3000: select 'zhangsan';
这是个集合,我这方便处理,所以就弄了一条
@梦里寻人: 是啊,我要的不是交叉后的数据,而是按照原来的顺序,自然拼接
@lane3000: 我这个就是啊,我说的是select 这个语句换成对应你的查询结果,添加到各自的临时表中