2013-11-26 4 views
-1

Я бегу запрос, который возвращает таблицуSQL модифицирования вывод запроса

key  value 
a_1   5 
c_4   9 
a_2   3 
b_1   4 
b_3   1 

сказать, что я хотел бы изменить мои ключи так, чтобы каждый б было б заменено объявлением так, что таблица будет выглядеть

key  value 
a_1   5 
c_4   9 
a_2   3 
d_1   4 <--modified 
d_3   1 <--modified 

Как я могу это сделать в sql (oracle)?

Редактировать: записи в этой таблице представляют собой суммы по значениям. Когда я следую рекомендациям первых двух респондентов, sql больше не будет группировать ключ, но выдает сообщение об ошибке «Отсутствие выражения». Я попытался определить ключ REPLACE (key, 'b', 'd') как newKey и Group newKey, но это не сработало. Любая идея, как я могу это решить?

Редактирование 2: Группирование работает также в предлагаемых решениях. Произошла ошибка на моей стороне. Благодаря

+1

Вы должны дать более подробную информацию о вашей таблице и запросе который дает эти данные. Логика замены b на d не ясна. – Noel

+0

, поскольку вы используете ключевые слова/зарезервированные слова для своего имени поля, поэтому вы не получаете результат, попробуйте добавить ans, он работает в Oracle с тем же именем, которое вы дали –

ответ

1

Попробуйте, как это,

WITH t(KEY, VALUE) AS 
(
    SELECT 'a_1', 5 FROM dual 
    union 
    SELECT 'c_4', 9 FROM dual 
    UNION 
    SELECT 'a_2', 3 FROM dual 
    UNION 
    SELECT 'b_1', 4 FROM dual 
    UNION 
    SELECT 'b_3', 1 FROM dual 
) 
SELECT REPLACE(KEY, 'b', 'd') key1 , value 
     FROM t 
ORDER BY key1; 

/

KEY1  VALUE 
---- ---------- 
a_1   5 
a_2   3 
c_4   9 
d_1   4 
d_3   1 
+0

Спасибо. Я немного упростил запрос в вопросе. Фактический запрос будет суммировать сумму ключей (ключ) и группу по ключу. это не работает после замены. см. править – chrise

+0

@ user1734278, Пожалуйста, покажите свой измененный запрос. – Dba

+0

Извините, у вас была ошибка в моем запросе. Решение работает – chrise

1

Попробуйте это ...

SELECT REPLACE(`key`, 'b', 'd') key, `value` FROM tablename 
0

Вы можете использовать следующий запрос, Этот запрос работает в Oracle 11g R2

SELECT REPLACE("key", 'b', 'd') as "key", "value" FROM Table1;; 

дем на http://sqlfiddle.com/#!4/8b17c/11

Пожалуйста, не используйте полевые имена в качестве ключа и значения, они могут столкнуться во многих местах в любом запросе

Смежные вопросы