2010-03-19 59 views
0
select count(a),b,c 
from APPLE 
    join MANGO on (APPLE.link=MANGO.link) 
    join ORANGE on (APPLE.link=ORANGE.link) 
where id='camel' 
group by b,c; 

B列组的相关版本结合给出像如何通过

1.0 
1.0,R 
1.0,B 
2.0 
2.0,B 
2.0,R 
3.0,C 
3.0,R 

值是有修改上述查询,以便所有1.0和1.0,R和1.0,B是一个方式合并为1.0和2.0,2.0,B合并为2.0和3.0和4.0相同的方式?

回答

1
SELECT COUNT(a), REGEXP_REPLACE(b, '([0-9]*\.[0-9]*)(.*)', '\1') b, c 
FROM apple 
JOIN mango 
ON  mango.link = apple.link 
JOIN orange 
ON  orange.link = apple.link 
WHERE id = 'camel' 
GROUP BY 
     REGEXP_REPLACE(b, '([0-9]*\.[0-9]*)(.*)', '\1'), c 
+0

我得到ORA-00904:无效的标识符错误的regexp_replace在组中,它的工作罚款线,即,选择 – randeepsp

+0

@randeepsp:哪个'Oracle'版本你使用? – Quassnoi

+0

我使用的是oracle 9.2.2 – randeepsp

1

你可以使用substr如果你没有获得regexp_replace(10克+)。如果你只有从聚集1.04.0

SELECT COUNT(a), substr(b, 1, 3), c 
    FROM APPLE 
    JOIN MANGO ON (APPLE.link = MANGO.link) 
    JOIN ORANGE ON (APPLE.link = ORANGE.link) 
WHERE id = 'camel' 
GROUP BY substr(b, 1, 3), c; 

如果你预计你可能会达到10.0可以使用instr获得的字符数:

SELECT COUNT(a), 
     CASE 
      WHEN instr(b, ',') > 0 THEN 
      substr(b, 1, instr(b, ',') - 1) 
      ELSE 
      b 
     END, c 
    FROM APPLE 
    JOIN MANGO ON (APPLE.link = MANGO.link) 
    JOIN ORANGE ON (APPLE.link = ORANGE.link) 
WHERE id = 'camel' 
GROUP BY CASE 
      WHEN instr(b, ',') > 0 THEN 
       substr(b, 1, instr(b, ',') - 1) 
      ELSE 
       b 
      END, c;