首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL Server查询中将相似id的不同行结果转换为具有唯一id的不同列

问如何在SQL Server查询中将相似id的不同行结果转换为具有唯一id的不同列
EN

Stack Overflow用户
提问于 2020-04-18 19:09:56
回答 2查看 94关注 0票数 0

我有两个表,它们有"1:*“关系。我希望连接两个表,并将具有相似id的所有行合并为一行,并将具有相同行值的不同列合并为一行。

为了让我在ssms 17中的结果是:

代码语言:javascript
复制
table1.id    table2.tag 
------------------------
1            <value a>
1            <value b>
1            <value c>
2            <value d>
2            <value e>

我想要这样的结果:

代码语言:javascript
复制
table1.id    C1.table2.tag    C2.table2.tag    C3.table2.tag
------------------------------------------------------------
1            <value a>        <value b>        <value c>
2            <value d>        <value e>        null
EN

回答 2

Stack Overflow用户

发布于 2020-04-18 19:13:35

如果标签不多,则可以进行条件聚合:

代码语言:javascript
复制
select id, 
       max(case when seq = 1 then tag end) as tag_1,
       max(case when seq = 2 then tag end) as tag_2,
       max(case when seq = 3 then tag end) as tag_3
from (select t1.id, t2.*, row_number() over (partition by t1.id order by t2.tag) as seq
      from table1 t1 inner join
           table2 t2
           on t2.id = t1.id
     ) t
group by id;

如果表中有更多的标签,那么你就需要动态透视。

票数 1
EN

Stack Overflow用户

发布于 2020-04-18 20:00:10

我不建议将每个标记放在单独的列中。另一种方法是将标记合并到单个列中。

例如:

代码语言:javascript
复制
select t1.table1_id,
       string_agg(t2.tag, ',') as tags
from table1 t1 join
     table2 t2
     on t2.id = t1.table2_id
group by t1.table1_id;

然后,您不必担心给定id或使用动态SQL的最大标记数。

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

https://stackoverflow.com/questions/61288112

复制
相关文章

相似问题

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