2013-09-17 2 views
2

Я пытаюсь обновить одну таблицу с помощью переменной столбца. Пример:Столбец, идентифицированный в обновлении от возвращаемого значения

Table: BILLING (ORIGIN OF DATA) 
Columns: 
- CUSTOMER 
- PERIOD 
- REVENUE 

TABLE: BILLING_MONTHLY 
Columns: 
- CUSTOMER 
- M201301 (this value is REVENUE per year/month) 
- M201302 (this value is REVENUE per year/month) 
- M201303 (this value is REVENUE per year/month) 

мне нужно обновить BILLING_MONTHLY со значением столбца BILLING (период), но не достичь заданного столбца в результате обновления, равной в выберите таблицы BILLING.

Пример:

Таблица БИЛЛИНГ

CUSTOMER PERIOD REVENUE 
05031  201301 1000 
05013  201301 550 
05031  201302 800 
05032  201303 930 
05031  201303 880 

Ожидаемый результат

Таблица BILLING_MONTHLY

CUSTOMER M201301   M201302   M201303 
05013  550 
05031  1000   800    880 
05032          930 

Моя идея: 1) Создать "ЗА", чтобы вставить клиента в BILLING_MONTHLY; 2) Создайте «ОБНОВЛЕНИЕ» для оценки клиента в год/месяц;

Проблема: я не получаю обновление, функционально из-за которого должен быть столбец.

Чтобы создать опрос:

CREATE TABLE BILLING 
(
CUSTOMER VARCHAR2(5 BYTE), 
PERIOD VARCHAR2(6 BYTE), 
REVENUE NUMBER 
); 

INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05031', '201301', 1000); 
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05013', '201301', 550); 
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05031', '201302', 800); 
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05032', '201303', 930); 
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05031', '201303', 880); 
COMMIT; 

CREATE TABLE BILLING_MONTH 
(
    CUSTOMER VARCHAR2(5 BYTE), 
    M201301 NUMBER, 
    M201302 NUMBER, 
    M201303 NUMBER 
); 

Может кто-нибудь помочь мне, пожалуйста? Спасибо заранее!

+0

Вам нужно перепроектировать свои таблицы. Это 'BILLING_MONTHLY' все неправильно. – gvee

+0

Теперь столы уверены, спасибо за подсказку «gvee». –

ответ

0

Это то, что вы хотите

select customer, sum(c1) M201301, sum(c2) M201302, sum(c3) M201303 

from(
select customer, 
case when period='201301' then revenue else 0 end 'C1', 
case when period='201302' then revenue else 0 end 'C2', 
case when period='201303' then revenue else 0 end 'C3' 
from billing 
) t 

group by customer 

Вам нужно контролировать диапазон месяц и имя столбца в результате самостоятельно. Если этот запрос является частью кодирования, вы можете позволить код ручку, что

sqlfiddle здесь http://sqlfiddle.com/#!2/7aa98/13

+0

Необходимо обновить столбцы на одного клиента, однако месяцы в таблице BILLING_MONTH - это значения в таблице BILLING. Когда я пытаюсь выполнить обновление, я не могу ссылаться на столбец для извлечения значения, потому что имя столбца M201303 (например) должно быть привязано к клиенту и периоду, только при обновлении столбец должен быть переменная и не фиксированная. Вы понимаете? –

+0

Ваш пример хороший, однако у меня есть данные уже в таблице и имеют отношение к более чем 3 годам (40 месяцев). С _CASE__SELECT_ будет очень большим и его нужно будет скорректировать где угодно. Если я использую таблицу с уже определенными годами, если вы получите значения столбцов, я не получаю, изменяя команды –

+0

Это выбор, используемый для значений извлечения: ВЫБЕРИТЕ ПЕРИОД, ЗАКАЗЧИК, СУММ (VALUES_INVOICE) ДОХОД ОТ БИЛЛИНГА GROUP BY PERIOD, CUSTOMER –

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