如何在java集合中进行内部循环?

如何在java集合中进行内部循环?,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我的SQL返回如下所示的值 enter code here studentid studentname playid gamename grade prizes --------- ------------ ----- ------------ ------ --------- 121 bob 1 game1 A 1

我的SQL返回如下所示的值

enter code here

studentid   studentname   playid     gamename        grade        prizes   
---------  ------------   -----      ------------    ------      ---------   
121   bob                1          game1           A           1 and 2  
121   bob                2          game2           C           1 and 3  
121   bob                3          game3           B           4 and 2    
121   bob                4          game4           D           1 and 2  
131   jack               3          gam3            A           1    
131   jack               1          game1           A           2 and 3  
我得到结果并迭代要显示的值。但在最后一列中,我需要以不同的格式显示这些值

Iterator<Search> iterator = products.iterator();   

while(iterator.hasNext())   
{   
Search req = (Search)iterator.next();   
req.getStudentid();   
req.getStudentname();   
req.getgameid();   
req.getgamename();   
req.getgrade();   
req.getprizes()          ;   
}  
如何在第一行中附加4行值?如何在这里循环? 请帮帮我

编辑:我的SQL查询是:


选择stu.studentid、stu.studentname、g.playid、stu.gamename、g.grade、g.values 来自学生斯图,游戏g 其中stu.studentid=g.studentid,stu.year=g.year
这可以只用SQL来完成,但我不确定它是否有最好的性能。这可能应该在您的表示逻辑中处理。我还建议您规范您的奖品栏。考虑存储这些1-N表游戏也许是。p> 有几件事你正试图去做。首先,您希望将所有奖品合并为一个值。您可以使用listag来实现这一点。但是,它将不包含不同的列表。因此,要分解列表,可以使用CONNECT BY和REGEXP_SUBSTR将列表分开-在本例中,我使用and作为分隔符。最后,再次使用Listag将不同的奖品列表重新组合在一起,最终得到如下结果:

select stu.studentid, stu.studentname, 
  g.playid, g.gamename,g.grade,
  listagg(allprizes, ' and ') within group (order by allprizes) allprizes
from student stu 
  join game g on stu.studentid = g.studentid and stu.year = g.year
  join (
    select distinct studentid, regexp_substr(allprizes,'[^ and ]+', 1, level) allprizes
    from 
    (
      select studentid, listagg(prizes, ' and ') within group (order by prizes) allprizes
      from game
      group by studentid
    ) 
    connect by regexp_substr(allprizes, '[^ and ]+', 1, level) is not null
  ) p on g.studentid=p.studentid
group by stu.studentid, stu.studentname, 
  g.playid, g.gamename,g.grade
导致:

STUDENTID   STUDENTNAME   PLAYID   GAMENAME   GRADE   ALLPRIZES
-------------------------------------------------------------------------
121         bob          1         game1      A       1 and 2 and 3 and 4
121         bob          2         game2      C       1 and 2 and 3 and 4
121         bob          3         game3      B       1 and 2 and 3 and 4
121         bob          4         game4      D       1 and 2 and 3 and 4
131         jack         1         game1      A       1 and 2 and 3
131         jack         3         game3      A       1 and 2 and 3

我在这个问题中添加了SQL和JDBC标记。这读起来更像是一个SQL问题,而不是Java问题,因为我认为你可以在某种查询中检索这些信息。你能发布你的SQL查询吗?我认为这可以通过SQL查询来管理,给我5分钟。选择stu.studentid,stu.studentname,g.playid,stu.gamename,g.grade,g.stu的奖品,游戏g其中stu.studentid=g.studentid和stu.year=g.year您使用的是Oracle、SQL Server和MySQL哪些RDBMS?字符串操作在每个查询中都是不同的。好的查询,我正在寻找那个。感谢您的支持。@user2444474-np,希望对您有所帮助!
STUDENTID   STUDENTNAME   PLAYID   GAMENAME   GRADE   ALLPRIZES
-------------------------------------------------------------------------
121         bob          1         game1      A       1 and 2 and 3 and 4
121         bob          2         game2      C       1 and 2 and 3 and 4
121         bob          3         game3      B       1 and 2 and 3 and 4
121         bob          4         game4      D       1 and 2 and 3 and 4
131         jack         1         game1      A       1 and 2 and 3
131         jack         3         game3      A       1 and 2 and 3