Sql Oracle11g,多支点

Sql Oracle11g,多支点,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,因此,我有一个工作查询,为我旋转一些数据 SELECT * FROM ( select requisitions.ACC_ID AS "Accession #" ,tests.TEST_ID ,results.RESULT_NUMERIC FROM requisitions inner join req_panels ON requisitions.acc_id = req_panels.acc_id inner join results ON req_panels.rp_id =

因此,我有一个工作查询,为我旋转一些数据

SELECT * FROM (
  select requisitions.ACC_ID AS "Accession #"
  ,tests.TEST_ID
  ,results.RESULT_NUMERIC
FROM requisitions

inner join req_panels ON requisitions.acc_id = req_panels.acc_id
inner join results ON req_panels.rp_id = results.rp_id
inner join tests ON results.test_id = tests.test_id

WHERE results.TEST_ID IN (1,2,3,4)
AND requisitions.RECEIVED_DATE > TO_DATE('9/1/2013', 'MM/DD/YYYY')
ORDER BY requisitions.ACC_ID
)
pivot(
      MAX(RESULT_NUMERIC)
      for TEST_ID IN ('1' AS Test1,'2' AS Test2,'3' AS Test3,'4' AS Test4)
)
现在,我必须在结果表中包含不同类型的result-RESULTS-ALPHA,作为每个ACC-ID的一列。result-RESULTS-ALPHA是一个clob。对于上面代码中已经包含的测试id,结果α为空。但它为另一个测试保留了一个值,我们称之为TestAlpha

因此,我目前从上述代码输出的是:

Acc_ID | Test 1 | Test 2 | Test 3 | Test 4
-------------------------------------------
000001 |   24   |   1.5  |   0.5  |  2.1
000002 |   15   |   2.1  |   0.3  |  1.3
我需要得到

Acc_ID | Test 1 | Test 2 | Test 3 | Test 4 | TestAlpha
--------------------------------------------------------
000001 |   24   |   1.5  |   0.5  |  2.1   |  abcd
000002 |   15   |   2.1  |   0.3  |  1.3   |  efgh
我怎样才能做到这一点?另一个支点?
谢谢。

如果您可以只使用CLOB字段的前4000个字符,那么您可以只使用子字符串:

SELECT * FROM (
  select requisitions.ACC_ID AS "Accession #"
  ,tests.TEST_ID
  ,results.RESULT_NUMERIC
  ,dbms_lob.substr(results.RESULT_ALPHA, 4000, 1) as result_alpha
FROM requisitions
...
当然,这会在输出中为您提供4000个字符宽的列,但实际上您对此无能为力,除非您可以根据对列中内容的了解设置较低的长度。虽然如果它小于4K,将其存储为CLOB并没有什么意义;不过,听起来你的数据很复杂

即使该值超过4000个字符,也将显示其开始。这是可以接受的,还是有用的,取决于您对pivot结果所做的操作

您所做的似乎是假设每个测试ID的所有结果记录的结果α是相同的;甚至对于每个ACC_ID。如果这是真的,那似乎有点浪费


我不确定是否有非编程解决方案可以恢复完整的CLOB。

您不能将额外的列添加到内部选择列表中吗?否。如果我尝试添加results.results\u alpha,您将收到一个错误;ORA-00932:不一致的数据类型:预期-获得CLOBY您预期的是输出中的完整CLOB,或者我当前正在查看的字段中的子字符串是否表示一个生物体名称,应该很适合,您能稍微解释一下最后一段的意思吗?我不太明白你的意思。基本上,我所做的是将Oracle DB用于为我所协助的公司构建的另一个软件。该软件适用于临床实验室LIS软件。我有一个只读帐户,用于提取需要在Excel中为业务合作伙伴创建报告的特定信息。他们无法授予对该软件的完全访问权限,因为它是HIPAA控制的。结果表包含100次测试的唯一结果。有些报告是数字的,有些是文本的,有些是/文本的。而且,这并不能完成我想做的事情。我想我可能需要提供一些示例数据来帮助您。这样做的目的是创建加入ID的acc_ID的副本。它没有将结果_alpha附加到acc_ID中,该acc_ID已与各种其他测试1、2、3、4一起列出。我相信这是因为它不是轴心的一部分。这就是问题所在,因为我目前正以结果为中心,我不认为我也可以以结果为中心。也许我必须有另一个支点或使用分组?我的意思是CLOB是相当严格的;例如,它们不能位于group by或order by中,因此使用大量case语句的旧手动pivot也不起作用。虽然我假设您有多个记录,但这是真的吗?还是因为pivot强制您使用聚合,所以您只使用max?对于每个acc_id的所有测试id值,测试alpha是否也将相同?从你的样品中很难分辨。即使使用短CLOB,更具代表性的数据也可能有用。@JayG30-它确实显示了report_alpha字段,虽然不是在末尾,但您可以在我的测试中使用外部查询来解决这个问题。但这也成为轴心群体的一部分;因此,如果一个acc_id有多个report_alpha,您将返回多行。也许不管你用什么方法运行这个程序,都没有显示额外的字段?不确定。我正在使用PL/SQL。看看这些数据,当test_id=resultalpha per accession acc_id时,似乎确实存在多个result_alpha。我必须将它们合并到一个字段中。然而,我仍然不认为它会起作用。我得到的结果基本上多次显示相同的acc_id,一次用于pivot创建的任何结果_数值结果,另一次用于结果_alpha。我正试图让sqlfiddle发挥作用,以便给出一个更好的例子,但oracle 11g根本不适合我。甚至不是简单的东西。MySQL似乎工作得很好。