所以我有一个可以为我调整一些数据的工作查询。
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)
)
现在,我必须在每个ACC_ID中包含不同类型的结果(结果表中的RESULTS_ALPHA)作为列。 RESULT_ALPHA是一个clob。对于上面代码中已包含的test_id,RESULTS_ALPHA为空。但它对另一个测试有价值,我们称之为#34; 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
我怎样才能做到这一点?另一个支点? 感谢。
答案 0 :(得分:0)
如果你只能使用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
对于每个results
的所有TEST_ID
记录都相同;甚至每个ACC_ID
。如果这是真的,那似乎有点浪费。
我不确定是否有非程序化解决方案可以恢复完整的CLOB。