我有这个查询但是当我使用左外连接 与XML 时它不起作用,拜托,您能帮我解决吗?< / p>
错误:ORACLE Sql Developer
SELECT
xmltype(x.texto_extenso).extract('/Datos/ID/text()').getclobVal() ID
,xmltype(x.texto_extenso).extract('/Datos/TITULAR/text()').getclobVal() Nombre
,xmltype(x.texto_extenso).extract('/Datos/CS/text()').getclobVal() LLAVE_JEFE
,xmltype(x2.texto_extenso).extract('/Datos/TITULAR/text()').getclobVal() NOMBRE_JEFE
FROM testXML x
LEFT OUTER JOIN testXML x2
ON xmltype(x.texto_extenso).extract('/Datos/CS/text()').getclobVal() =
xmltype(x2.texto_extenso).extract('/Datos/ID/text()').getclobVal()
WHERE x.LLAVE_TIPO_TEXTO = 11635;
查询:
create table testXML (
llave_texto varchar2(20)
,llave_tipo_texto varchar2(20)
,texto_extenso clob default empty_clob()
);
表格定义:
insert into testXML values ('1','11635','<Datos><ID>1</ID><TITULAR>Gobernador</TITULAR><CS>0</CS></Datos>');
insert into testXML values ('2','11635','<Datos><ID>2</ID><TITULAR>Acapulco</TITULAR><CS>1</CS></Datos>');
insert into testXML values ('3','11635','<Datos><ID>3</ID><TITULAR>Cuernavaca</TITULAR><CS>1</CS></Datos>');
insert into testXML values ('4','11635','<Datos><ID>4</ID><TITULAR>Coyoacán</TITULAR><CS>1</CS></Datos>');
插入内容:
print (df)
country year indicatorName value
0 USA 1970 Agricultural Land 10
1 USA 1970 Crop production 2
2 USA 2000 Agricultural Land 10
3 USA 2000 Crop production 3
4 Mexico 1970 Agricultural Land 10
5 Mexico 1970 Crop production 5
6 Mexico 2000 Agricultural Land 10
7 Mexico 2000 Crop production 4
df = (df.set_index(['country','year','indicatorName'])['value']
.unstack()
.assign(crop_prod_density=lambda x: x['Crop production'].div(x['Agricultural Land'])))
print (df)
indicatorName Agricultural Land Crop production crop_prod_density
country year
Mexico 1970 10 5 0.5
2000 10 4 0.4
USA 1970 10 2 0.2
2000 10 3 0.3
答案 0 :(得分:1)
试试这个。
WITH tst
AS (SELECT x.LLAVE_TIPO_TEXTO,
xmltype (x.texto_extenso).EXTRACT ('/Datos/ID/text()').getclobVal ()
ID,
xmltype (x.texto_extenso).EXTRACT ('/Datos/TITULAR/text()').getclobVal ()
Nombre,
xmltype (x.texto_extenso).EXTRACT ('/Datos/CS/text()').getclobVal ()
LLAVE_JEFE
FROM testXML x)
SELECT x.ID,
x.Nombre,
x.LLAVE_JEFE,
x2.NOMBRE NOMBRE_JEFE
FROM tst x
LEFT OUTER JOIN tst x2 ON TO_CHAR (x.LLAVE_JEFE) = TO_CHAR (x2.ID)
WHERE x.LLAVE_TIPO_TEXTO = 11635;