Oracle – Excel视图

我使用Oracle XE11g和Excel 2007.我已经在SQL Developer中创build了一个从多个表中select字段的视图。 目的是让Excel使用ODBC导入这个视图。 问题是这个视图没有按照我想要的方式在Excel中提供数据

如果我使用我创build的视图到Excel中,我得到这样的东西:

personname - testname - time - objectname - result - date Edward - RunningTest - 15:22:01 - Speed (km/h) - 12 - 24-04-2012 Edward - RunningTest - 15:22:01 - Heart Rate - 98 - 24-04-2012 Edward - RunningTest - 15:22:01 - Power - 50 - 24-04-2012 Edward - RunningTest - 15:22:02 - Speed (km/h) - 13 - 24-04-2012 Edward - RunningTest - 15:22:02 - Heart Rate - 99 - 24-04-2012 Edward - RunningTest - 15:22:02 - Power - 12 - 24-04-2012 Edward - RunningTest - 15:22:03 - Speed (km/h) - 12 - 24-04-2012 Edward - RunningTest - 15:22:03 - Heart Rate - 100 - 24-04-2012 Edward - RunningTest - 15:22:03 - Power - 12 - 24-04-2012 

这是我使用的视图的查询:

 select psn.naam personname , tst.name testname , tms.seconds time , obj.name objectname , trt.result result , dtm.days date from persons psn , results rst , times tms , tests tst , objects obj , dates dts where psn.id=trt.persons_id and obj.id=trt.objects_id and obj.tests_id=tst.id and trt.date_id=dts.id and rst.times_id=tms.id and tst.name='RunningTest' 

请注意查询被翻译成英文字段名,所以可能会有一些错误。

我想要在Excel中表示的数据是这样的:

 Personname Edward Date 24-04-2012 Time - Speed (km/h) - Heart Rate - Power 15:22:01 - 12 - 98 - 50 15:22:02 - 13 - 99 - 52 15:22:03 - 12 - 100 - 51 etc------------ 

有什么办法可以build立视图,以显示上面的数据? 任何帮助表示赞赏。

你有两个问题。 首先是您的查询不提供您需要在Excel中的数据。 这是使用键值对而不是适当的模式产生的经典问题。

这是一个可能的解决scheme:

 select psn.naam personname , tst.name testname , tms.seconds time , rst1.result speed , rst2.result heartrate , rst3.result power , dtm.days date from persons psn , results trt1 , results trt2 , results trt3 , times tms , tests tst , objects obj , dates dts where psn.id=trt.persons_id and obj.tests_id=tst.id and trt1.date_id=dts.id and trt2.date_id=dts.id and trt3.date_id=dts.id and trt1.times_id=tms.id and trt2.times_id=tms.id and trt3.times_id=tms.id and ( ( obj.name = 'Speed (km/h)' and obj.id=trt1.objects_id ) or ( obj.name = 'Heart Rate' and obj.id=trt2.objects_id ) or ( obj.name = 'Power' and obj.id=trt3.objects_id ) ) and tst.name='RunningTest' 

警告:你的别名在翻译中被破坏了,所以这可能不起作用,但是基本原则是你需要三个结果表的实例,一个用于你从OBJECTNAMES表中调用的每个独立属性。

第二个问题是你的布局不符合结果集。 这是另一个经典问题,这次与使用错误的工具相关联。 电子表格并不是真正的GUI演示工具。 Excel的强大function是使用列和行的matrix。 所以通常情况下,它非常适合处理数据库,因为查询会返回列和行。

你在泡菜,因为你想多次显示不同的一些列和一些coumns。 有很多不同的方式来处理这个问题。

  1. 使用内联游标expression式来返回锯齿状的结果集。 虽然坦率地说,我不知道ODBC是否支持这一点,Excel是否能够渲染它。
  2. 使用两个查询,其中一个返回“主数据”–PersonName,Date – 和一个检索细节 – 其他所有内容。
  3. 使用您现有的查询检索完整的结果集到一个工作表中,但向用户提供一个不同的工作表,它使用引用来实现您所需的布局。
  4. 使用适当的GUI开发工具来构build您的客户端应用程序。 市场上有很多这样的产品。 Apex可能是一个不错的select: 了解更多信息 。

下面的PIVOT查询应该接近你想要的,但没有数据可以玩,我不是100%肯定 – 但它应该提供一个起点,您可以从:

 SELECT * FROM (SELECT * FROM (SELECT psn.NAAM PERSONNAME, tst.NAME TESTNAME, tms.SECONDS TIME, obj.NAME OBJECTNAME, rst.RESULT RESULT, dts.DAYS DATE FROM PERSONS psn, RESULTS rst, TIMES tms, TESTS tst, OBJECTS obj, DATES dts WHERE psn.ID = rst.PERSONS_ID AND obj.ID = rst.OBJECTS_ID AND obj.TESTS_ID = tst.ID AND trt.DATE_ID = dts.ID AND rst.TIMES_ID = tms.ID AND tst.NAME = 'RunningTest') t PIVOT(SUM(RESULT) FOR OBJECTNAME IN ('Speed (km/h)', 'Heart Rate', 'Power'))); 

分享和享受。

你可以testing和使用现有的答案,并使用下面的插入行尾

 Select name || chr(10) || chr(13) || date || chr(10) || chr(13)|| other select columns in your view 

在Windows操作系统中达到预期的效果

采用鲍勃的答案与你想要的结果

 SELECT PERSONNAME || chr(10) || chr(13) as PERSONNAME, DATE || chr(10) || chr(13) as DATE, chr(10) || chr(13) ||TESTNAME, OBJECTNAME, RESULT FROM (SELECT * FROM (SELECT psn.NAAM PERSONNAME, tst.NAME TESTNAME, tms.SECONDS TIME, obj.NAME OBJECTNAME, rst.RESULT RESULT, dts.DAYS DATE FROM PERSONS psn, RESULTS rst, TIMES tms, TESTS tst, OBJECTS obj, DATES dts WHERE psn.ID = rst.PERSONS_ID AND obj.ID = rst.OBJECTS_ID AND obj.TESTS_ID = tst.ID AND trt.DATE_ID = dts.ID AND rst.TIMES_ID = tms.ID AND tst.NAME = 'RunningTest') t PIVOT(SUM(RESULT) FOR OBJECTNAME IN ('Speed (km/h)', 'Heart Rate', 'Power')));