У меня есть таблица ATTR_MASTER
, которая имеет содержание следующим образом:Выбор различных элементов во время соединения двух XMLTables
ID L_NAME_N C_LEVEL
1000 e1 D
1001 e2 D
1002 e3 D
1003 e4 D
1004 e1 D
1005 e2 D
1006 e3 D
1007 e4 D
Теперь я уверен, выполнение запроса на выборку следующим образом:
SELECT e.ID,x.EVALUE,z.VALUE_TYPE,x.w FROM ATTR_MASTER e, xmltable
(
'//B/C/D/*[local-name(.)!=''w'' and text()]'
PASSING xmltype('<A><B><C><D><w>1L</w><e1>AMAR</e1><e2>AKBAR</e2><e3>1234</e3><e4>BIJAY</e4></D></C><C><D><w>1B</w><e1>ARTI</e1><e2>AKBAR</e2><e3>5678</e3><e4>BIJAY</e4></D></C></B></A>')
COLUMNS
EVALUE VARCHAR2(100) PATH './text()',
L_NAME_EN VARCHAR2(50) PATH 'local-name(.)',
w VARCHAR2(20) PATH './parent::*/w'
)x LEFT OUTER JOIN
XMLTABLE
(
'//GetDataLookupValuesResponse/tuple/old'
PASSING xmltype('<GetDataLookupValuesResponse><tuple><old><DataLookup><Key>e1</Key><Value>String</Value></DataLookup></old></tuple><tuple><old><DataLookup><Key>e2</Key><Value>String</Value></DataLookup></old></tuple><tuple><old><DataLookup><Key>e3</Key><Value>Number</Value></DataLookup></old></tuple><tuple><old><DataLookup><Key>e4</Key><Value>String</Value></DataLookup></old></tuple></GetDataLookupValuesResponse>')
COLUMNS
VALUE_TYPE VARCHAR2(50) PATH '//Value',
C_KEY varchar2(50) PATH '//Key'
)z ON x.L_NAME_EN=z.C_KEY
where e.L_NAME_EN=x.L_NAME_EN;
Выход Показанная
ID EVALUE VALUE_TYPE W
1004 AMAR String 1L
1000 AMAR String 1L
1005 AKBAR String 1L
1001 AKBAR String 1L
1006 1234 Number 1L
1002 1234 Number 1L
1007 BIJAY String 1L
1003 BIJAY String 1L
1004 ARTI String 1B
1000 ARTI String 1B
1005 AKBAR String 1B
1001 AKBAR String 1B
1006 5678 Number 1B
1002 5678 Number 1B
1007 BIJAY String 1B
1003 BIJAY String 1B
Это потому, что у нас есть повторяющиеся элементы в столбце L_NAME_N
таблицы ATTR_MASTER
, поэтому в предложении where оператора select каждый элемент рассматривается дважды и снова, так как в XML
мы имеем два элемента «w», значение каждого элемента печатается четыре раза на выходе , Но мне нужен следующий результат,
ID EVALUE VALUE_TYPE W
1000 AMAR String 1L
1004 ARTI String 1B
1001 AKBAR String 1L
1005 AKBAR String 1B
1002 1234 Number 1L
1006 5678 Number 1B
1003 BIJAY String 1L
1007 BIJAY String 1B
Последовательность строк может изменяться в выходных данных, который не является проблемой, но мне нужна только эти строки. Снова я не могу изменить содержимое таблицы ATTR_MASTER
. Также я пробовал SELECT DISTINCT...
, но это не сработает. Где я ошибаюсь?
Да, идентификатор подал также требуется – ArpanMona
, то вы можете использовать функцию MAX и группу по – TheName
так что ваш код должен выглядеть следующим образом
– TheName