На основе примера желаемого вывода я ограничил вывод первым экземпляром состояния в таблице 1 и упорядочил поворотные имена по ID, хотя это соответствует альфа-порядку поля имени для данных данного примера.
См. Это SQL Fiddle
Настройка схемы Oracle 11g R2 :
Обратите внимание, что в Oracle ROWID является зарезервированнымимя, поэтому я изменил его на ID.
CREATE TABLE Table1
("ID" number, "STATE" varchar2(2))
;
INSERT ALL
INTO Table1 ("ID", "STATE")
VALUES (34, 'TX')
INTO Table1 ("ID", "STATE")
VALUES (56, 'NY')
INTO Table1 ("ID", "STATE")
VALUES (67, 'WA')
INTO Table1 ("ID", "STATE")
VALUES (89, 'TX')
SELECT * FROM dual
;
CREATE TABLE Table2
("ID" number, "STATE" varchar2(2), "NAME" varchar2(12))
;
INSERT ALL
INTO Table2 ("ID", "STATE", "NAME")
VALUES (19, 'TX', 'Chuck, Brown')
INTO Table2 ("ID", "STATE", "NAME")
VALUES (20, 'TX', 'Nick, Johnes')
SELECT * FROM dual
;
Запрос 1 :
select t1.id
, t2.state
, t2.name
from (select min(id) id, state from table1 group by state) t1
join table2 t2
on t1.state = t2.state
Результаты :
| ID | STATE | NAME |
|----|-------|--------------|
| 34 | TX | Nick, Johnes |
| 34 | TX | Chuck, Brown |
Запрос 2 :
with t1(id, state) as (
select min(id) id, state from table1 group by state
), t2 as (
select state
, row_number() over (partition by state order by name) rn
, name
from table2
)
select t1.id
, pvt.*
from t1
join t2 pivot (max(name) for rn in (1 name_1,2 name_2)) pvt
on t1.state = pvt.state
Результаты :
| ID | STATE | NAME_1 | NAME_2 |
|----|-------|--------------|--------------|
| 34 | TX | Chuck, Brown | Nick, Johnes |