dbTalk Databases Forums  

Field not recognized from inside inner query

comp.databases.oracle.misc comp.databases.oracle.misc


Discuss Field not recognized from inside inner query in the comp.databases.oracle.misc forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Etantonio
 
Posts: n/a

Default Field not recognized from inside inner query - 08-20-2009 , 10:41 AM






Good morning,
in the following query I've a problem with B.ABI_CAPOGRU that is not
recognized inside the select max
this is probably due to the fact that inside the select max I've other
select, how can I solve this problem ?
This query does exactly what I need but it doesn't work, may you help
me ?

Antonio
www.etantonio.it/en


SELECT CONCAT(ABI_CAPOGRU,CONCAT('.',CONTROCOD_CAPOGRU))
ABI_CC_CAPOGRU ,

B.PROG_PUBBL ,

B.DATA_RIF ,

B.DATAORA_PREL ,

B.ABI_CAPOGRU ,

B.CONTROCOD_CAPOGRU ,

B.DEN_GRUPPO ,
(
SELECT MAX(data_isc_gru) FROM
(
SELECT DISTINCT X.data_isc_gru
FROM TGRUBAN_INTERNET X
WHERE X.ABI_CAPOGRU = B.ABI_CAPOGRU
AND X.TIPO_PART = 1
minus
SELECT DISTINCT X.data_isc_gru
FROM TGRUBAN_INTERNET X, TGRUBAN_INTERNET Y
WHERE
X.ABI_CAPOGRU = B.ABI_CAPOGRU
AND
X.cod_interno
= Y.cod_interno
AND X.TIPO_PART = 1
AND ( to_date( X.DATA_ISC, 'YYYYMMDD' ) - to_date
( Y.DATA_CAN, 'YYYYMMDD' ) ) = 1
AND X.DEN_COMP <> Y.DEN_COMP
)
) AS DATA_ISC_GRU ,
CASE
WHEN B.DATA_CAN_GRU = 99991231
THEN 0
ELSE B.DATA_CAN_GRU
END AS DATA_CAN_GRU ,
CASE
WHEN B.ABI_COMP = 0
THEN NULL
ELSE B.ABI_COMP
END AS ABI_COMP ,
CASE
WHEN B.CONTROCOD_COMP = 0
THEN NULL
ELSE B.CONTROCOD_COMP
END AS CONTROCOD_COMP ,
B.COD_INTERNO ,
B.COD_FIS ,
B.TIPO_PART ,
B.DES_TIPO_PART ,
B.DEN_COMP ,
B.COD_ATT_ECO ,
B.DES_ATT_ECO ,
B.COM_LEG_SEDE ,
B.COM_AMM_SEDE ,
B.DATA_ISC ,
CASE
WHEN B.DATA_CAN = 99991231
THEN 0
ELSE B.DATA_CAN
END AS DATA_CAN ,
20071231 AS DATA_RIF_GRUPPO ,
0 AS COD_ENTE ,
E.DEN_LOC AS DEN_STATO
FROM TGRUBAN_INTERNET B,
TLOC_INTERNET D ,
TLOC_INTERNET E
WHERE B.COM_AMM_SEDE = D.COD_LOC
AND D.COD_STATO = E.COD_STATO
AND E.COD_STATO = E.COD_LOC
AND B.ABI_CAPOGRU IN
(
SELECT DISTINCT A.ABI_CAPOGRU
FROM TGRUBAN_INTERNET A
WHERE 20071231 BETWEEN A.DATA_ISC AND A.DATA_CAN
AND 20071231 < A.DATA_CAN
)
AND 20071231 BETWEEN DATA_ISC_GRU AND DATA_CAN_GRU
AND 20071231 < DATA_CAN_GRU
AND TIPO_PART = 1
ORDER BY DEN_GRUPPO ASC,
ABI_CAPOGRU ASC ,
DATA_ISC_GRU ASC

Reply With Quote
  #2  
Old   
Peter Nilsson
 
Posts: n/a

Default Re: Field not recognized from inside inner query - 08-21-2009 , 01:02 AM






On Aug 21, 1:41 am, Etantonio <etanto... (AT) gmail (DOT) com> wrote:
Quote:
Good morning,
in the following query I've a problem with B.ABI_CAPOGRU
that is not recognized inside the select max this is probably
due to the fact that inside the select max I've other
select, how can I solve this problem ?
Create an inline view is one method.

Quote:
This query does exactly what I need but it doesn't work,
may you help me ?
....
SELECT CONCAT(ABI_CAPOGRU,CONCAT('.',CONTROCOD_CAPOGRU))
ABI_CC_CAPOGRU ,
select b.abi_capogru || '.' || b.controcod_capogru abi_cc_capogru,

<snip>
Quote:
(
SELECT MAX(data_isc_gru) FROM
(
SELECT DISTINCT X.data_isc_gru
FROM TGRUBAN_INTERNET X
WHERE X.ABI_CAPOGRU = B.ABI_CAPOGRU
AND X.TIPO_PART = 1
minus
SELECT DISTINCT X.data_isc_gru
FROM TGRUBAN_INTERNET X, TGRUBAN_INTERNET Y
WHERE
X.ABI_CAPOGRU = B.ABI_CAPOGRU
AND
X.cod_interno
= Y.cod_interno
AND X.TIPO_PART = 1
AND ( to_date( X.DATA_ISC, 'YYYYMMDD' ) - to_date
( Y.DATA_CAN, 'YYYYMMDD' ) ) = 1
AND X.DEN_COMP <> Y.DEN_COMP
)
) AS DATA_ISC_GRU ,
Since it's difficult to decifer what this query is meant to do, it's
hard to offer an alternative. You haven't supplied any DDL and a
proper solution may well depend on that.

Quote:
CASE
WHEN B.DATA_CAN_GRU = 99991231
THEN 0
ELSE B.DATA_CAN_GRU
END AS DATA_CAN_GRU ,
decode(b.data_can_gru, 99991231, 0, b.data_can_gru) data_can_gru,

Quote:
CASE
WHEN B.ABI_COMP = 0
THEN NULL
ELSE B.ABI_COMP
END AS ABI_COMP ,
nullif(b.abi_comp, 0) abi_comp,

<snip>
Quote:
FROM TGRUBAN_INTERNET B,
TLOC_INTERNET D ,
TLOC_INTERNET E
WHERE B.COM_AMM_SEDE = D.COD_LOC
AND D.COD_STATO = E.COD_STATO
AND E.COD_STATO = E.COD_LOC
AND B.ABI_CAPOGRU IN
(
SELECT DISTINCT A.ABI_CAPOGRU
FROM TGRUBAN_INTERNET A
WHERE 20071231 BETWEEN A.DATA_ISC AND A.DATA_CAN
AND 20071231 < A.DATA_CAN
)
Your condition is equivalent to...

where a.data_isc <= 20071231
and 20071231 <= a.data_can
and 20071231 < a.data_can

So I'd just write...

where a.data_isc <= 20071231
and 20071231 < a.data_can

YMMV

But it seems to me you can replace that entire B.ABI_CAPOGRU IN
test with...

and b.abi_capogru is not null
and b.data_isc <= 20071231
and 20071231 < b.data_can

Quote:
AND 20071231 BETWEEN DATA_ISC_GRU AND DATA_CAN_GRU
AND 20071231 < DATA_CAN_GRU
AND TIPO_PART = 1
ORDER BY DEN_GRUPPO ASC,
ABI_CAPOGRU ASC ,
DATA_ISC_GRU ASC
At a guess, you can 'solve' your problem with something like...

select ...
bx.data_isc_gru,
...
from tgruban_internet b
left join
(
select abi_capogru, max(data_isc_gru) data_isc_gru
from (
select x.abi_capogru, x.data_isc_gru
from tgruban_internet x
where x.tipo_part = 1
minus
select x.abi_capogru, x.data_isc_gru
from tgruban_internet x,
tgruban_internet y
where x.cod_interno = y.cod_interno
and x.tipo_part = 1
and to_date(x.data_isc, 'YYYYMMDD')
- to_date(y.data_can, 'YYYYMMDD')) = 1
and x.den_comp <> y.den_comp
)
group by abi_capogru
) bx on bx.abi_capogru = b.abi_capogru,

--
Peter

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.