Как объединить связанную версию в группу по - PullRequest
0 голосов
/ 19 марта 2010
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?

Ответы [ 2 ]

1 голос
/ 19 марта 2010

вы можете использовать substr, если у вас нет доступа к regexp_replace (10g +).Если вам нужно только агрегировать от 1.0 до 4.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;
1 голос
/ 19 марта 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...