我有一张表格,如下所示
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中的表来实现此目的。我没有数据库背景。我很困惑,解决这个问题的最佳方法是什么。
答案 0 :(得分:3)
如何找到匹配日期以将其放入
in(…)
?
select
的{{3}}似乎接受子查询,例如:
select distinct(Date) from DbTable
附录:如果使用子查询不能接受XML,则可以使用单独的查询来确定所需的不同值。作为一个具体示例,以下方法将从List
返回DBTable
个唯一日期。该列表适用于构建数据透视表的IN
子句。
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;
}
附录:可在pivot_in_clause教程和JDBC™ Database Access中找到其他指南。
答案 1 :(得分:2)
如果您正在使用oracle数据库,那么您可以使用PIVOT函数来实现此目的,如下所示 -
select * from JTable
pivot(sum(value) for date in ('11-Feb-2011','12-Feb-2011','13-Feb-2011'));
希望它能解决你的问题。