我无法上传图片,但在我的查询中,犯罪ID重复,因为有两种证据类型,是否有可能使它成为犯罪1 .......包含.....物理上有1个,DNA有3个?
目前的结果是:
犯罪1于2013年12月11日发生,其中包含证据类型:物理性质 其中有1个。
犯罪1于2013年12月11日发生,并包含证据类型:DNA的DNA 有3个。
代码如下:
select 'Crime' || ' ' || crime.crime_id || ' ' || 'occured on' || ' ' ||
crime.crime_date|| ' ' || ' and contains evidence type:' || ' ' ||
evidence.evidence_type || ' ' || 'of which there are' || ' '||
evidence.quantity || '.' "Crime Data"
from crime, evidence
where crime.crime_id=evidence.crime_id
order by crime.crime_id;
答案 0 :(得分:0)
我们可以使用LISTAGG()来接近这一点。
select crime_str
|| evidence.evidence_agg_str
|| '.' "Crime Data"
from ( select crime.crime_id
, 'Crime' || ' ' || crime.crime_id || ' occured on ' ||
crime.crime_date|| ' and contains evidence type: ' as crime_str
from crime ) crime,
( select distinct crime_id
, listagg (evidence_str , ',') within group (order by evidence_type)
over (partition by crime_id) evidence_agg_str
from (
select crime_id
, evidence_type
, evidence_type || ' of which there are '||
quantity as evidence_str
from evidence )
) evidence
where crime.crime_id=evidence.crime_id
order by crime.crime_id;
从the SQL Fiddle可以看出,句子结构并不完美:
犯罪1发生在12-NOV-13并且包含证据类型:DNA有3个,物理有1个。
如果这对您真的很重要,您可以使用REGEXP_COUNT来识别证据字符串中的最后一个逗号,使用REGEXP_REPLACE来替换and
。这取决于你想要获得多么复杂。 Find out more