2011-07-24 56 views
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。我没有数据库的背景。我很困惑什么是解决这个问题的最佳方法。

回答

3

我怎样才能找到匹配的日期,把它放进in(…)

selectpivot_in_clause似乎接受子查询,如这样的:

select distinct(Date) from DbTable 

附录:如果XML是使用子查询不可接受的,单独的查询可以被用于确定所需要的不同的值。作为具体示例,以下方法将从DBTable返回唯一日期的List。该列表适用于构建枢纽的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; 
} 

附录:更多的指导可以在JDBC™ Database Access教程和Oracle® Database JDBC Developer's Guide被发现。

+0

你可以给完整的查询请.... –

+0

我试图把subquery在数据透视中,但在简单的枢轴失败... 它与XML关键字,但我不想在clob或长数据类型...我想得到不同的列... 如果你可以写,请做这个..它会对我很有帮助。 –

+0

啊,我明白了。然后首先运行'select distinct'查询,然后使用结果集从返回的值构造'in'子句。 – trashgod

2

如果在此使用的是Oracle数据库,那么你可以使用旋转功能来实现这一目标,如下 -

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

希望这将解决您的问题。

+0

感谢您的回复。如何使其通用。我的意思是如何在运行时找到匹配日期并将其放入(...)方法中。以上只是一个例子。有很多记录。我不能硬编码。 – u449355

+0

我认为在纯粹的SQL没有其他方式明确命名的列pivoting – rabudde

+0

谢谢rabudde .. 什么rabudde告诉你正确的答案为你评论的问题.... 有没有办法sql ... 但是我认为在pl/sql中我们可以做到这一点......但是还没有在pl/sql中尝试过。:) –