繁体   English   中英

压缩具有相同 id 的行

Compress rows with same id

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

嗨,我正在尝试遍历此结构:

id string1 string2 different_string
1  test    test      asd
1  test    test      dsa
2  data    data      qwe
3  info    info      ewq
3  info    info      zxc
3  info    info      qaz

我有具有完全相同值的行,但其中一个不同,所以我试图将该数据压缩为一行。

这是我的代码:

            int actual_id = list.get(0).num(); //I pick the first id = 1
            ArrayList<ArrayList<String>> listOLists = new ArrayList<ArrayList<String>>();

            ArrayList<String> items = new ArrayList<String>();
            for(int i = 0; i < list.size(); i++){
                if(list.get(i).id == actual_id){
                    String str = list.get(i).different_string;
                    items.add(str);
                    listOLists.add(items);
                    items.clear();
                }else {
                    actual_id = list.get(i).id;
                    i--;    
                }
            }
            for(int j = 0; j < listOLists.size(); j++) {
                System.out.println(listOLists);
            }

首先,我检查每一行的 id 并将其与实际值进行比较,我将字符串添加到数组中,然后将其附加到列表中,以便我可以存储我的数据,然后重置数组以将新数据附加到它并重复过程,问题是当我重置数组时,循环似乎没有向列表添加更多项目,我做错了什么?

这是我想得到这样的东西:

{1, test, test, {asd, dsa}},{2, data, data, {asd}},{3, info, info, {ewq, zxc,qaz}}
1 个回复

您的代码有点难以理解,但据我所知,您的问题在于代码的这一部分:

if(list.get(i).id == actual_id){
                String str = list.get(i).different_string;
                items.add(str);
                listOLists.add(items);
                items.clear();
            }else {

您将items添加到listOList ,但在下一行中您将其清除。 items仍然引用您刚刚添加到listOList的 List,因此当您清除它时,它listOList清除listOList的列表。 您可能希望在if块中声明items ,以便每次通过循环时都会创建一个新列表,如下所示:

if(list.get(i).id == actual_id){
            ArrayList<String> items = new ArrayList<String>();
            String str = list.get(i).different_string;
            items.add(str);
            listOLists.add(items);
        }else {

这样,通过循环的每次迭代都会创建一个新List ,从而避免了这个问题。 我不知道这是否能解决你所有的问题,但我希望这能让你朝着正确的方向前进。

1 如果值具有相同的ID,则通过求和来压缩数据行[重复]

这个问题已经在这里有了答案: 如何按组对变量求和 13答案 AS 400计划生产时,我的数据通常是什么样的 这就是我想要的数据外观。 如果您注意到,则样式号为24510的行尚未压缩为10行,数量为10。在此之前,有7个单独的行具有不同的数量。 ...

2018-12-10 16:13:23 2 45   r
3 平均具有相同ID的行

我有三个表,并进行了联接以返回每行[ID] : [number]结果[ID] : [number] ,这一切正常,但是问题是某些行将具有相同的[ID]因此可能返回的示例数据为: 依此类推...但是我要返回的是: 如您所见,具有相同[ID]的行已被平均。 我的问题是; 有没有办 ...

2011-07-20 13:20:41 3 2593   mysql/ sql
5 具有相同 ID 的 MySQL SUM 行

我有一个我似乎无法解决的问题。 我有两个表, Project和Activity 。 我应该将每个项目花费的总活动时间结合起来。 不包括少于 1000 小时的项目。 如您所见, pro1加起来有 1000 多个小时, pro3也是如此。 我希望最终结果打印出这样的东西。 到目前为止,这是我的 ...

6 合并具有相同ID的行

我的数据库中有很多表,它们具有:RowID,ProductID和Numeric Value(Numeric值可以为NULL,这表示无穷大)。 在表中可以有许多具有相同ProductId的行。 是否可以使函数接受某些表(不是全部,仅由我选择)并返回包含每个表的所有ProductId的新表,但表 ...

2019-08-13 10:10:16 1 37   sql
7 2列具有相同ID的1行

我有一个只有2列的表,如下 我想取得最终结果如下 我目前正在阅读PIVOT功能,但不确定自己是否走对了。 还是SQL新手 ...

2017-08-09 04:12:12 2 26   sql
10 SQL SELECT ID WHERE 具有相同 ID 的行具有不同的值

我需要一些帮助来跨行创建 SQL 语句。 正如您在屏幕截图中看到的,我选择了 ID=10004 和 ID=10005。 但实际上我只想显示 ID=10005。 如前所述,我正在尝试跨行过滤。 我的目标是获取所有 ID,其中所有条件都与“AND”相关联,如下所示: 但这不会返回任何内容。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM