查询相关问题

时间:2015-05-04 19:09:57

标签: oracle

我无法上传图片,但在我的查询中,犯罪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;

1 个答案:

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