Как я могу получить человека с таким же случаем нет в оракуле? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть таблица с именем CASE_PERSON. DDL:

CREATE TABLE CASE_PERSON
(
  ID VARCHAR2(50) NOT NULL   PRIMARY KEY,
  p_id VARCHAR2(50) DEFAULT NULL NOT NULL,
  id_card VARCHAR2(18) DEFAULT NULL NOT NULL,
  p_name VARCHAR2(50) NOT NULL,
  case_no VARCHAR2(60) NOT NULL,
  case_name VARCHAR2(200) NOT NULL,
 )

И немного DML

insert into CASE_PERSON(ID, P_ID, ID_CARD, P_NAME, CASE_NO, CASE_NAME)
values ('001', '123', '123-123123', 'tom', 'c-001', 'case-one');

insert into CASE_PERSON(ID, P_ID, ID_CARD, P_NAME, CASE_NO, CASE_NAME)
values ('002', '234', '123-123234', 'rose', 'c-001', 'case-one');

insert into CASE_PERSON(ID, P_ID, ID_CARD, P_NAME, CASE_NO, CASE_NAME)
values ('003', '345', '123-123345', 'jack', 'c-001', 'case-one');

insert into CASE_PERSON(ID, P_ID, ID_CARD, P_NAME, CASE_NO, CASE_NAME)
values ('005', '555', '123-123555', 'roman', 'c-002', 'case-two');

insert into CASE_PERSON(ID, P_ID, ID_CARD, P_NAME, CASE_NO, CASE_NAME)
values ('006', '666', '123-123666', 'jim', 'c-002', 'case-two');

Таблица построена из таблицы Person и caseТаблица.Префикс с p начинается с PERSON, а case - с CASE. Во-первых, я получаю всю идентификационную карту от PERSON и запрос от CASE_PERSON, чтобы найти человека с таким же регистром, который соответствует данной идентификационной карте.

Теперь я хочу получить результат под названием «человек с тем же делом».Выходные данные должны иметь следующий формат:

id   p_id   id_card    case_no case_name  same_case_id_card same_case_p_name
 1    123  123-123123   c-001  case-one     123-123234           rose
 2    123  123-123123   c-001  case-one     123-123345           jack
 3    555  123-123555   c-002  case-two     123-123666           jim  

Как я могу выполнить запрос?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы, похоже, хотите узнать подробности дела от первого лица, скрещенные с данными о лицах не от первого лица:

WITH cte AS (
  SELECT *, ROW_NUMBER() OVER(PARTITION BY case_no ORDER BY p_id) as rown FROM case_person
)
SELECT 
  ROW_NUMBER() OVER(ORDER BY two.p_id) as id,  
  one.p_id,
  one.id_card,
  one.case_no,
  one.case_name,
  two.id_card as same_case_id_card,
  two.case_name as same_case_p_name
FROM
  (SELECT * FROM cte WHERE rown = 1) one
  INNER JOIN
  (SELECT * FROM cte WHERE rown > 1) two
  ON one.case_no = two.case_no
0 голосов
/ 20 сентября 2018

Я думаю, что ваш запрос:

SELECT * FROM case a, case b 
WHERE a.case_no = b.case_no;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...