Java 组织数据的问题

Java 组织数据的问题,java,sql,swing,Java,Sql,Swing,我有一张如下表 RMG Date Value YA 11/02/2001 94 YB 11/02/2011 63 YC 11/02/2011 35 YA 12/02/2011 32 YB 12/02/2011 45 YC 12/02/2011 51 YA 13/02/2011 32 YB 13/02/2011 45 YC 13/02/2011 51 根据需求,我想提取通用日期,并像 RMG 11/02/2011 1

我有一张如下表

RMG Date        Value
YA  11/02/2001  94
YB  11/02/2011  63
YC  11/02/2011  35
YA  12/02/2011  32
YB  12/02/2011  45
YC  12/02/2011  51
YA  13/02/2011  32
YB  13/02/2011  45
YC  13/02/2011  51
根据需求,我想提取通用日期,并像

  RMG         11/02/2011      12/02/2011    13/02/2011
  YA           94                 32             32
  YB           63                 45             45
  YC           35                 51             51

如何使用Java或SQL中的表来实现此目的。我没有数据库方面的背景。我不知道解决这个问题的最佳方法是什么。

如果您使用的是oracle数据库,那么您可以使用PIVOT函数来实现这一点,如下所示-

select * from JTable 
pivot(sum(value) for date in ('11-Feb-2011','12-Feb-2011','13-Feb-2011'));

希望它能解决您的问题。

如果您在这里使用的是oracle数据库,那么您可以使用PIVOT函数来实现这一点,如下所示-

select * from JTable 
pivot(sum(value) for date in ('11-Feb-2011','12-Feb-2011','13-Feb-2011'));
希望它能解决你的问题

如何在(…)中找到将其放入
的匹配日期

select
的字段似乎接受子查询,例如:

select distinct(Date) from DbTable
附录:如果子查询不能接受XML,则可以使用单独的查询来确定所需的不同值。作为一个具体示例,以下方法将从
DBTable
返回唯一日期的
列表。该列表适用于在pivot的
子句中构造

private static List<Date> getDates(Connection conn) throws SQLException {
    List<Date> list = new ArrayList<Date>();
    StringBuilder sb = new StringBuilder();
    Statement st = conn.createStatement();
    st.execute("select distinct(Date) from DbTable");
    ResultSet rset = st.getResultSet();
    while (rset.next()) {
        list.add(rset.getDate(1));
    }
    return list;
}
私有静态列表getDates(连接连接)引发SQLException{
列表=新的ArrayList();
StringBuilder sb=新的StringBuilder();
语句st=conn.createStatement();
st.execute(“从数据库表中选择不同的(日期”);
ResultSet rset=st.getResultSet();
while(rset.next()){
添加(rset.getDate(1));
}
退货清单;
}
附录:附加指南可在教程和中找到

如何在(…)
中找到将其放入
的匹配日期

select
的字段似乎接受子查询,例如:

select distinct(Date) from DbTable
附录:如果子查询不能接受XML,则可以使用单独的查询来确定所需的不同值。作为一个具体示例,以下方法将从
DBTable
返回唯一日期的
列表。该列表适用于在pivot的
子句中构造

private static List<Date> getDates(Connection conn) throws SQLException {
    List<Date> list = new ArrayList<Date>();
    StringBuilder sb = new StringBuilder();
    Statement st = conn.createStatement();
    st.execute("select distinct(Date) from DbTable");
    ResultSet rset = st.getResultSet();
    while (rset.next()) {
        list.add(rset.getDate(1));
    }
    return list;
}
私有静态列表getDates(连接连接)引发SQLException{
列表=新的ArrayList();
StringBuilder sb=新的StringBuilder();
语句st=conn.createStatement();
st.execute(“从数据库表中选择不同的(日期”);
ResultSet rset=st.getResultSet();
while(rset.next()){
添加(rset.getDate(1));
}
退货清单;
}


附录:更多指南可在教程和中找到。

感谢您的回复。如何使其通用。我的意思是如何在运行时找到匹配的日期并将其放入in(…)方法中。以上只是一个例子。那里有很多记录。我不会硬编码。我认为在纯SQL中,除了为PivotingTanks rabudde显式命名列之外,没有其他方法。。拉布德所说的是你所评论问题的正确答案。。。。在sql中没有任何方法。。。但是我认为在Pl/sql中我们可以做到这一点。。。但还没有在pl/sql中尝试过……)我也用PL/sql做了测试。。。在plsql中,我们可以做这种报告@如果您需要pl/sql,请告诉我code@Pratik我想用Java构建这种报告。我只是想得到SQL逻辑,这样我就可以用Java编写类似的代码。如果您分享这个查询,那将是一个很大的帮助,因为我是SQL方面的新手。非常感谢。谢谢你的回复。如何使其通用。我的意思是如何在运行时找到匹配的日期并将其放入in(…)方法中。以上只是一个例子。那里有很多记录。我不会硬编码。我认为在纯SQL中,除了为PivotingTanks rabudde显式命名列之外,没有其他方法。。拉布德所说的是你所评论问题的正确答案。。。。在sql中没有任何方法。。。但是我认为在Pl/sql中我们可以做到这一点。。。但还没有在pl/sql中尝试过……)我也用PL/sql做了测试。。。在plsql中,我们可以做这种报告@如果您需要pl/sql,请告诉我code@Pratik我想用Java构建这种报告。我只是想得到SQL逻辑,这样我就可以用Java编写类似的代码。如果您分享这个查询,那将是一个很大的帮助,因为我是SQL方面的新手。非常感谢。我曾尝试将子查询放在pivot中,但在简单pivot中失败。。。它与XML关键字一起工作,但我不希望使用clob或长数据类型。。。我想进入不同的专栏。。。如果你会写,请写。。这对我很有帮助。啊,我明白了。然后首先运行
selectdistinct
查询,然后使用结果集从返回的值构造
in
子句。它会创建不同的列吗???我想不会。。。。如果可能的话,请给出例子。。。我试图这样做,但失败了。。。如果可以,请给出sql语句…应该有一个函数用于此,但我不知道..:(…这对其他人也会有帮助..好的,现在…实际上我的问题是如何为动态日期数创建不同的列…但我让你想知道SQL查询本身在java中的性质…对吗?意思是在获得所有不同的日期后,你想把每个日期都放在java程序中以准备这种SQL…但是我如果你知道如何编写这样的SQL,请告诉我..我会以通常的方式使用
语句
PreparedStatement
。我曾尝试将子查询放在pivot中,但在简单pivot中失败…它使用XML关键字工作,但我不希望使用clob或长数据类型…我想在不同的列中…如果你可以编写te请这样做。这对我很有帮助。啊,我明白了。然后先运行
select distinct
查询,然后使用结果集从返回的值构造
in
子句。它会创建不同的列吗?我想不会。如果可能的话,请给出示例…我试图这样做,但失败了。。。如果可以,请给出sql语句…应该有一个函数,但我不知道