如何使用Crystal SQL Expression返回逗号分隔的字符串

时间:2014-10-01 18:05:06

标签: crystal-reports

我想在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表如下所示: Test Table

我的报告将针对具有特定测试(例如钙)的所有样品进行过滤。对于报告中的这些样本,My SQL Expression应检索样本上的所有“其他”测试。请参阅输出示例。

Report Example

2 个答案:

答案 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;