因此,我有一个可以工作的查询,它可以为我透视一些数据。
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)
)现在,我必须包含一种不同类型的结果(结果表中的RESULTS_ALPHA)作为每个ACC_ID的列。RESULT_ALPHA是一个clob。对于已包含在上述代码中的test_id,RESULTS_ALPHA为空。但是它为另一个测试保留了一个值,我们称之为"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我如何才能做到这一点呢?另一个支点?谢谢。
发布于 2014-05-21 22:34:55
如果你可以只使用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个字符,它也会显示它的开头。这是可接受的,还是有用的,取决于你对轴心的结果做了什么。
您所做的似乎确实假设RESULTS_ALPHA对于每个TEST_ID的所有results记录都是相同的;甚至对于每个ACC_ID都是相同的。如果这是真的,这看起来有点浪费。
我不确定是否有一个非编程的解决方案来获得完整的CLOB。
https://stackoverflow.com/questions/23767903
复制相似问题