запрос t / sql с двумя разными таблицами - PullRequest
0 голосов
/ 22 мая 2019

enter image description here

Мне нужно создать оператор выбора оракула, который возвращает acct, name, city, splitcost из table1 и APIcost из table2.table1 разбивает 90 на 3 разности.суммы, потому что они распространены в другом месте.table2 - это загрузка API, которая имеет только 1 запись из общего количества 90. Если я использую внутреннее соединение, повторения 90 в каждой строке связываются по acct.мне нужно, чтобы результаты выглядели так, как будто во втором представлении только API стоило всего 90. один раз за действие.
надеюсь, что это имеет смысл.Если бы я использовал sql, я, вероятно,.сделать временную таблицу, но это должно быть сделано в Oracle, который я тоже не использую.

1 Ответ

0 голосов
/ 23 мая 2019

Нет необходимости во временной таблице, просто создайте ранг и сделайте на нем инструкцию case, чтобы заполнить первую строку api_cost. Я не знаю, какую строку вы хотите, поэтому поиграйтесь с предложением «order by», чтобы получить эту строку, которую вы хотите.

/* Building out your data to a "temp table" */
with table1 as
(select 1111 as acct, 'john' as name, 'hampton' as city, 30 as split_cost, 90 as 
api_cost from dual union all
select 1111 as acct, 'john' as name, 'hampton' as city, 40 as split_cost, 90 as 
api_cost from dual union all
select 1111 as acct, 'john' as name, 'hampton' as city, 20 as split_cost, 90 as 
api_cost from dual union all
select 1111 as acct, 'john' as name, 'hampton' as city, 20 as split_cost, 90 as 
api_cost from dual)
/* You need nothing above here, just below */
select acct, name, city, split_cost, 
case when rank() over (partition by acct, name, city  order by split_cost, rownum) = 
1 then api_cost
     else null
     end as api_cost
from table1; --substitute your table name here

OUTPUT:
ACCT    NAME    CITY    SPLIT_COST  API_COST
1111    john    hampton 20          90
1111    john    hampton 20  
1111    john    hampton 30  
1111    john    hampton 40  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...