我想在Crystal Report中的每一行(Details部分)上显示一个字符串。将在SQL Expression的帮助下检索此字符串的内容。
我所拥有的SQL如下:但是如果返回多行,我不知道如何将其转换为逗号分隔字符串。我有一个Oracle 11g数据库。
(select distinct NAME from TEST
where SAMPLE_NUMBER = "TEST"."SAMPLE_NUMBER"
and X_BENCH <> '"TEST"."X_BENCH"')
TEST表如下所示:
我的报告将针对具有特定测试(例如钙)的所有样品进行过滤。对于报告中的这些样本,My SQL Expression应检索样本上的所有“其他”测试。请参阅输出示例。
答案 0 :(得分:0)
您可以使用wm_concat完成此操作。 WM_CONCAT在一个组中获取一堆行,并输出一个逗号分隔的varchar。
使用substr函数可以将第一个结果与最后一个结果分开。
请注意我编写脏代码(没有编译器检查我的语法)所以事情可能不是100%正确。
select sample_number
, substr(wm_concat(name),1,instr(wm_concat(name),",")-1) as NAME
, substr(wm_concat(name),instr(wm_concat(name),","),length(wm_concat(name)-instr(wm_concat(name),",")+1) as OTHER_TEST_NAMES
from TEST
where SAMPLE_NUMBER = "TEST"."SAMPLE_NUMBER"
and X_BENCH <> '"TEST"."X_BENCH"'
and rownum < 2
group by sample_number
但是,如果没有必要将名称和其他测试名称分开,实际上要简单得多。
select sample_number
, wm_concat(name) as NAMES
from TEST
where SAMPLE_NUMBER = "TEST"."SAMPLE_NUMBER"
and X_BENCH <> '"TEST"."X_BENCH"'
and rownum < 2
group by sample_number
另外,请尝试整理线条,以便于阅读。
答案 1 :(得分:0)
您可以使用LISTAGG在Oracle中将行转换为逗号分隔的字符串。 示例:
SELECT user_id
, LISTAGG(expertise, ',')
WITHIN GROUP (ORDER BY expertise)
AS expertise
FROM TEMP_TABLE
GROUP BY user_id;