【问题标题】:How to convert different row result by the similar id to different columns with unique id in SQL Server query如何在 SQL Server 查询中将相似 id 的不同行结果转换为具有唯一 id 的不同列
【发布时间】:2020-04-18 11:09:55
【问题描述】:

我有两个具有“1:*”关系的表。我想加入两个表并将具有相似 id 的所有行合并为一行和具有相同行值的不同列。

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

table1.id    table2.tag 
------------------------
1            <value a>
1            <value b>
1            <value c>
2            <value d>
2            <value e>

我想要这个结果:

table1.id    C1.table2.tag    C2.table2.tag    C3.table2.tag
------------------------------------------------------------
1            <value a>        <value b>        <value c>
2            <value d>        <value e>        null

【问题讨论】:

    标签: sql sql-server ssms-17


    【解决方案1】:

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

    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;
    

    如果表格有更多标签,那么您需要动态枢轴。

    【讨论】:

      【解决方案2】:

      我不建议将每个标签放在单独的列中。另一种方法是将标签组合成一列。

      例如:

      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 的最大标签数。

      【讨论】:

      • 非常感谢 Gordon 的回答,但我需要列上的这个值。我有很多 id,每个 id 最多有 5 个标签。
      • @Elmojioo 。 . .那么 Yogesh 会为您提供正确的答案
      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 2017-12-31
      • 2023-04-06
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      相关资源
      最近更新 更多