我有一个包含 2 列的表,第一列称为ID ,第二列称为TRACKING ID列有重复项,我想将所有这些重复项合并到一行中,其中来自重复行的TRACKING中的每个值都放入同一行内的新列中,并且不再有重复项。

我尝试了一些建议的方法,其中所有值都将连接到一列中,但我希望这些重复IDTRACKING值位于单独的列中。 下面的代码没有按照我的意图去做。

SELECT ID, TRACKING = 
    STUFF((SELECT DISTINCT ', ' + TRACKING
       FROM #t b 
       WHERE b.ID = a.ID 
      FOR XML PATH('')), 1, 2, '')
FROM #t a
GROUP BY ID

我正在寻找这个:

| ID | TRACKING |
-----------------
| 5  | 13t3in3i |
| 5  | g13g13gg |
| 3  | egqegqgq |
| 2  | 14y2y24y |
| 2  | 42yy44yy |
| 5  | 8i535i35 |

并将其变成这样:

| ID |  TRACKING  | TRACKING1 | TRACKING2 |
-----------------
| 5  |  13t3in3i  | g13g13gg  | 8i535i35  |
| 3  |  egqegqgq  |           |           |
| 2  |  14y2y24y  | 42yy44yy  |           |

#1楼 票数:0

在 MySQL 中(相对)痛苦的方法是使用相关子查询:

select i.id,
       (select t.tracking
        from t
        where t.id = i.id
        order by t.tracking
        limit 1, 0
       ) as tracking_1,
       (select t.tracking
        from t
        where t.id = i.id
        order by t.tracking
        limit 1, 1
       ) as tracking_2,
       (select t.tracking
        from t
        where t.id = i.id
        order by t.tracking
        limit 1, 2
       ) as tracking_3
from (select distinct id from t
     ) i;

尽管看起来很糟糕,但它可能会在(id, tracking)上使用索引时获得令人惊讶的不错性能。

顺便说一句,您使用stuff()原始代码会将所有内容放入一列:

select id, group_concat(tracking)
from t
group by id;

#2楼 票数:-1

with test_tbl as
(
    select 5 id, 'goog' tracking,'goog' tracking1
    union all
    select 5 id, 'goog1','goo'
    union all
    select 2 , 'yahoo','yah'
    union all
    select 2, 'yahoo1','ya'
    union all
    select 3,'azure','azu'
), modified_tbl as
(
    select id,array_agg(concat(tracking)) Tracking,array_agg(concat(tracking1)) Tracking1 from test_tbl group by 1
)

select id, tracking[safe_offset(0)]  Tracking_1,tracking1[safe_offset(0)]  Tracking_2, tracking[safe_offset(1)] Tracking_3,tracking1[safe_offset(1)] Tracking_4 from modified_tbl where array_length(Tracking) > 1

  ask by holodout translate from so

未解决问题?本站智能推荐:

1回复

mysql 5.7中JSON数据类型列中的嵌套更新查询

我在表中添加了新的JSON数据类型列(bill_plans) 。 现在,我想像这样更新bill_plans列 我成功创建了该列,并且还能够更新bill_plans列。 该表包含bill_cycle和fees也可以作为现有列,所以我想更新bill_plans列这样的事情 简
5回复

为什么 COUNT() 只显示一行表格?

我在数据库menagerie有以下表pet : 现在,如果我运行以下查询: 我得到以下输出: 输出显示owner所有值,以及每行中curdate()返回的值。 现在,如果我运行以下查询: 我得到以下输出: 我的问题是使MySQL在第一个示例中输出第二个owner Diane 的
5回复

MySQL:仅在日期不相同时才计算每月的不同user_id

表 我想返回包含用户数的月度记录。 上面的查询在2017-09年返回的计数为2,但我想避免仅在每天重复的user_id / date。 上面的行应计为1,因为它是同一用户和同一日期 上面的记录是user_id => 1,但是日期不同,因此应该计算在内。
1回复

e标志和特殊字符在mysql中做什么?

我正在从http://dev.mysql.com/doc/refman/5.7/en/batch-mode.html学习mysql。 在第二段中说: 如果您在Windows下运行mysql并在文件中包含一些导致问题的特殊字符,则可以执行以下操作: 什么是特殊字符?
1回复

根据可变列数删除具有重复值的行

考虑下表 第 1 列 | 第 2 列 | 第 3 列 | 第4列 | 乙 | 1 | 2 | 乙 | 2 | 3 | | | 2 | 4 我想根据cloumn1和column2删除重复项并只保留一个这样的实例。 因此上表应该看起来像 | 乙 | 1 | 2 | |
3回复

根据第一列的重复值匹配第二列的重复值

我有这样的桌子 我有这个表的两个条件是: Val 列必须是重复值 AND, Val2 列必须重复 所以我的目标是在满足两个条件时返回数据。 如果列 val 有重复值,列 val2 有重复值,并且每一列都在自己的行上。 我的查询看起来像这样 结果是这样的 如您所见,该列彼
3回复

如何在mysql中选择除group by以外的其他列

我实际上有一个像这样的数据库 现在我想从此表中获取ID字段和max(check_in),也可以通过org_entry_id 我已经尝试过像这样的查询,但是它将给出full groupBy mode错误 因此,我阅读了该手册,发现该手册已写入ANY_VALUE但我不希望使用该
3回复

删除和插入会为键 PRIMARY 抛出重复条目

我有一个复合 PK,我需要在其中更新其 PK 值之一。 但是由于一些内部问题,我无法向 PK 列发出更新查询。 所以我正在触发DELETE和INSERT查询。 此DELETE和INSERT是在TRANSACTION (READ COMMITTED) 内完成的。 但有时,当两个请求确实更新到同一