首页 新闻 会员 周边

ms sql 如何合并无关的数据列?

0
悬赏园豆:40 [待解决问题]

请问,比如我查询出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的主页 lane3000 | 初学一级 | 园豆:6
提问于:2019-10-29 15:38
< >
分享
所有回答(3)
0

这两个表有关联嘛?

永远跟党走i | 园豆:1519 (小虾三级) | 2019-10-29 16:08

无关联

支持(0) 反对(0) lane3000 | 园豆:6 (初学一级) | 2019-10-29 16:16

@lane3000:
然后union 就可以了 (我没试...)

支持(0) 反对(0) 永远跟党走i | 园豆:1519 (小虾三级) | 2019-10-30 14:04

@Cgrain: id列如何得到?不可用row_number,因为要order,一旦order了,顺序就变了,就错乱了

支持(0) 反对(0) lane3000 | 园豆:6 (初学一级) | 2019-10-30 15:18

@lane3000:

select id=IDENTITY(int,1,1), a.name as name into tests from a

这样估计可以。

支持(0) 反对(0) 永远跟党走i | 园豆:1519 (小虾三级) | 2019-10-31 17:41
0
select t1.*,t2.* from
(select *, rownumer() as id from t1) t1
left join 
(select *, rownumer() as id from t2)
on t1.id=t2.id

差不多伪代码这样子

czd890 | 园豆:14412 (专家六级) | 2019-10-29 16:20

好像只能这样了,构造出一个相同的字段,然后连接...

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
支持(0) 反对(0) 永远跟党走i | 园豆:1519 (小虾三级) | 2019-10-29 17:51

@Cgrain:
S_UserLogInfo, B_User 没有关联字段么... 感觉你这个查出来join的数据么有业务意义呀...

支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2019-10-29 18:38

@czd890: 我随便拿的表~~~~ 要实现上面的这种操作,除了rownumber ,没想到其它的了,union试了一下,可是可以,但是数据关联不上~~~~

支持(0) 反对(0) 永远跟党走i | 园豆:1519 (小虾三级) | 2019-10-29 20:24

你这段sql语句会炸,他表没有任何关联关系比较神奇

支持(0) 反对(0) 小小咸鱼YwY | 园豆:3210 (老鸟四级) | 2019-10-29 20:41

@Cgrain: 你用row_number 一旦order之后可能顺序就不一样了

支持(0) 反对(0) lane3000 | 园豆:6 (初学一级) | 2019-10-30 13:05
0

用临时表实现此功能,亲测可用:

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;
悟行 | 园豆:12559 (专家六级) | 2019-10-30 08:47

你这两个表的数据只有一条,如果多条就交叉了

支持(0) 反对(0) lane3000 | 园豆:6 (初学一级) | 2019-10-30 13:03

@lane3000: select 'zhangsan'; 

这是个集合,我这方便处理,所以就弄了一条

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2019-10-30 13:43

@梦里寻人: 是啊,我要的不是交叉后的数据,而是按照原来的顺序,自然拼接

支持(0) 反对(0) lane3000 | 园豆:6 (初学一级) | 2019-10-30 13:46

@lane3000: 我这个就是啊,我说的是select 这个语句换成对应你的查询结果,添加到各自的临时表中

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2019-10-30 16:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册