首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接表和连接字段

连接表和连接字段
EN

Stack Overflow用户
提问于 2014-06-20 10:07:59
回答 1查看 39关注 0票数 1

使用MS-SQL2008r2,我有两个表,具有多个辅助ID,需要将其连接到一个视图(用于导出),该视图每个辅助ID有一个行,而表数据连接到每个表的单个字段中。

代码语言:javascript
复制
tbl-1 
id | adid | ImImage1 | ImName2 
1 | 1 | Im_a |  Nm _a
2 | 1 | Im_b |  Nm _b
3 | 1 | Im_c |  Nm _c
4 | 2 | Im_x |  Nm _x
5 | 2 | Im_y |  Nm _y
6 | 2 | Im_z |  Nm _z

tbl-2 
id | adid | ImImage1 | ImName1 
1 | 1 | Im_d |  Nm _d
2 | 1 | Im_e |  Nm _e
3 | 1 | Im_f |  Nm _f
4 | 2 | Im_u |  Nm _u
5 | 2 | Im_v |  Nm _v
6 | 2 | Im_w |  Nm_w

Result

adid | ImImage1-tbl1 | ImName2-tbl1 | ImImage1-tbl2 | ImName1-tbl2 
1   Im_a, Im_b, Im_c  |  Nm _a, Nm _b, Nm _c, |  Im_d, Im_e, Im_f, | Nm _d, Nm _e, Nm _f 
2   Im_x, Im_y, Im_z  |  Nm _x, Nm _y, Nm _x  |  Im_u, Im_v, Im_w  | Nm _u, Nm _v, Nm _w

目前,我所能做的只是一个很长的列表,它看起来就像表1附加到表2(每个adid条目都有一行)。

首先创建一个视图,将每个表连接到每个adid的一行中,然后创建一个新的视图来连接它们并添加其他两个字段,这样会更好吗?还是有更有效的方法来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-20 10:34:49

我认为最有效的方法是使用Server的XML扩展将行连接到一行中:

代码语言:javascript
复制
SELECT  ads.ADID,
        [ImImage1-tbl1] = STUFF(i1.val.value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
        [ImName2-tbl1] = STUFF(n1.val.value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
        [ImImage1-tbl2] = STUFF(i2.val.value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
        [ImName1-tbl2] = STUFF(n2.val.value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM    AdTable AS Ads
        CROSS APPLY
        (   SELECT  ', ' + ImImage1
            FROM    tbl1 AS t
            WHERE   t.AdID = ads.ADID
            FOR XML PATH(''), TYPE
        ) AS i1 (val)
        CROSS APPLY
        (   SELECT  ', ' + ImName2
            FROM    tbl1 AS t
            WHERE   t.AdID = ads.ADID
            FOR XML PATH(''), TYPE
        ) AS n1 (val)
        CROSS APPLY
        (   SELECT  ', ' + ImImage1
            FROM    tbl2 AS t
            WHERE   t.AdID = ads.ADID
            FOR XML PATH(''), TYPE
        ) AS i2 (val)
        CROSS APPLY
        (   SELECT  ', ' + ImName1
            FROM    tbl2 AS t
            WHERE   t.AdID = ads.ADID
            FOR XML PATH(''), TYPE
        ) AS n2 (val);

SQL Fiddle示例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24324826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档