SQL Join help required!
Hi all
I need help with a join.
If you click the image link below, I need to find a way to join table 1 and table 2 to get table3:
http://img229.imageshack.us/img229/1401/83192078uq8.jpg
Help would be very much appreciated!
Thanks in advance.
with Table1 as(select 1234 as ProjectID,'Smith' as LastName from dual
union select 1234,'Maria' from dual
union select 1234,'Victo' from dual),
Table2 as (select 1234 as ProjectID,200 as Val from dual
union select 1234,300 from dual
union select 1234,400 from dual)
select nvl(a.ProjectID,b.ProjectID) as ProjectID,a.LastName,b.Val
from Table1 a full join Table2 b
on 1=0;
PROJECTID LASTN VAL
1234 Maria null
1234 Smith null
1234 Victo null
1234 null 200
1234 null 300
1234 null 400
Similar Messages
-
SQL Experts,
I have a query below. Can I improve the SQL joining order in highlighted section - Lines 31 to 40
SNIOTM.SNI_PA_OTM_ARC_DRVR -- around 200K rows
SNIOTM.SNI_PA_ORD_SHP_STATUS -- 8 rows
Edited by: 922411 on May 12, 2013 7:42 PM922411 wrote:
SQL Experts,
I have a query below. Can I improve the SQL joining order in highlighted section - Lines 31 to 40
SNIOTM.SNI_PA_OTM_ARC_DRVR -- around 200K rows
SNIOTM.SNI_PA_ORD_SHP_STATUS -- 8 rowsYou need not worry about the Joining Order, Oracle CBO is efficient enough to choose the Most Efficient way of joining the tables. However, it will depend on your Oracle Version, which you have not mentioned. If you are 10g or higher then you certainly need not worry.
If you sense a problem in performance of query, then I will suggest you read the linked threads in {message:id=9360003} and post the details as specified.
Only this will help us provide releavant suggestions and avoid guessing games.
PS:- Do not forget to post Oracle Version and the Explain Plan in {noformat}{noformat} tags, exactly as specified. -
SQL Join help for multiple values in single field.
Hello All,
I need a help, I have two tables T1 and T2
Content of T2 will be like
T2. ID | T2.USERNAME
ID1 | John
ID2 | Peter
ID3 | Mark
Content of T1 is like
T1.ID
ID1 ID2 ID3
ID2
ID1 ID3
I need to join these two tables and replace the T1.ID values with T2.USERNAME, for eg. Row one of T1 should be changed as John Peter Mark.
Note: ID1 ID2 ID3 is a single value.
Thanks for your help.
Sathish.At Volder: I have made a slight enhancement. It's the same thing but the other way around as last week's regular expression thread. Remember the "and then the bird flew away"? ;-)
SQL> create table t1
2 as
3 select 'ID1 ID2 ID3' id from dual union all
4 select 'ID2' from dual union all
5 select 'ID1 ID3' from dual union all
6 select 'ID11 ID2' from dual
7 /
Tabel is aangemaakt.
SQL> create table t2
2 as
3 select 'ID1' id, 'John' username from dual union all
4 select 'ID2', 'Peter' from dual union all
5 select 'ID3', 'Mark' from dual union all
6 select 'ID11', 'Volder' from dual
7 /
Tabel is aangemaakt.
SQL> select * from t1
2 model
3 reference r on (select t2.*, rownum rn from t2)
4 dimension by (rn)
5 measures(id, username)
6 main m
7 dimension by (id)
8 measures(cast(id as varchar(200)) str)
9 rules iterate(100) until (r.id[iteration_number+1] is null)
10 (str[any] = replace(str[CV()], r.id[iteration_number+1],r.username[iteration_number+1]))
11 /
ID STR
ID1 ID2 ID3 John Peter Mark
ID2 Peter
ID1 ID3 John Mark
ID11 ID2 John1 Peter
4 rijen zijn geselecteerd.
SQL> select id
2 , str
3 from t1
4 model
5 reference r on (select id,username,rownum rn from t2)
6 dimension by (rn)
7 measures (id, username)
8 main m
9 dimension by (id)
10 measures (cast(' ' || id || ' ' as varchar2(200)) str)
11 rules iterate(1000) until (r.id[iteration_number+1] is null)
12 ( str[any] = replace
13 ( str[cv()]
14 , ' ' || r.id[iteration_number+1] || ' '
15 , ' ' || r.username[iteration_number+1] || ' '
16 )
17 )
18 /
ID STR
ID1 ID2 ID3 John Peter Mark
ID2 Peter
ID1 ID3 John Mark
ID11 ID2 Volder Peter
4 rijen zijn geselecteerd.At Sathish: just look at the queries we have to come up with to do such a simple thing. As said many times before, I would also encourage you to change the design instead of executing the queries presented by Volder and me.
Regards,
Rob.
Message was edited by:
Rob van Wijk
Just noticed I missed a final TRIM function around "str", so please add this. -
i have 3 string like below
string1 varchar2(3000) := ' fonction code=''33'' and the limit for the subfunction is 300. it may have function_code=''100'' ) ) ) )';
string2 varchar2(2000):='function_code=''100''';
string3 varchar2(3000);requirement is
if i found string2 in string1 preceded by four brackets ,example function_code=''100'' ) ) ) )' then
i have replace to replace the 4th bracket with
function code is null )the string1 now will be
' fonction code=''33'' and the limit for the subfunction is 300. it may have function_code=''100'' ) ) ) function code is null )Pls help
NOte: bracket may or may not have spaces between them
SSQL> declare
2 string1 varchar2(3000) := 'AND NOT ( ( ( FUNCTION_CODE = ''88'' ) OR ( FUNCTION_CODE = ''21'' ) OR ( FUNCTION_CODE = ''51'' ) OR ( FUNCTION_CODE = ''85'' ) ) ) )' ;
3 string2 varchar2(2000):='FUNCTION_CODE = ''85''';
4 string3 varchar2(3000);
5 begin
6 string3 :=regexp_replace(string1,'^(.*)('||string2||')(([[:blank:]]?\)[[:blank:]]?){3})([[:blank:]]?\))(.*)$','\1\2\3function code is null\4\5');
7 dbms_output.put_line(string3);
8 end;
9 /
AND NOT ( ( ( FUNCTION_CODE = '88' ) OR ( FUNCTION_CODE = '21' ) OR ( FUNCTION_CODE = '51' ) OR (
FUNCTION_CODE = '85' ) ) ) function code is null ) )
PL/SQL procedure successfully completed.Best regards
Maxim -
Importing 30 tables into one SQL Table (Help Required)
Dear Experts,
I am new in SQL server, actually i need to gather 30 different excel file in one sql server table and i have imported all excel file in different databases, all tables have 186 different columns and datatypes. I couldnt change data type while conversion.
Now all columns have different data type which are occupying extra space in my database.
Now the problem is that i need to convert all databases into one database or table. Although i have created a table but i dont have idea how to import all table into one table and defining datatype in new table while importing the old tables.
Please help me in this matter or if any body has skype or any other chatting id please do let me know so that i may explain it better.
Thanking you in advance.
Best Regards,
SQL_beginnerThere are several things you can try. If you have SSIS, take a look at this.
http://www.singhvikash.in/2013/06/ssis-how-to-load-multiple-excel-files.html
https://www.simple-talk.com/sql/ssis/importing-excel-data-into-sql-server-via-ssis-questions-you-were-too-shy-to-ask/
Also, if your files have virtually the same name, like files with dates in the name, you can loop through files in your folder, and increment the loop with each run through.
DECLARE @intFlag
INT
SET @intFlag
= 1
WHILE (@intFlag
<=30)
BEGIN
PRINT @intFlag
declare @fullpath1
varchar(1000)
select @fullpath1
= '''\\path to your files\'
+ convert(varchar,
getdate()- @intFlag
, 112)
+ '_your-text-file-name.txt'''
declare @cmd1
nvarchar(1000)
select @cmd1
= 'bulk insert [dbo].[your-table-name] from '
+ @fullpath1 +
' with (FIELDTERMINATOR = ''\t'', FIRSTROW = 2, ROWTERMINATOR=''0x0a'')'
exec (@cmd1)
SET @intFlag
= @intFlag + 1
END
GO
Knowledge is the only thing that I can give you, and still retain, and we are both better off for it. -
HI Team,
I have requirement to load data in to table using sqlloader, as i am having three level's(Header, Detail, Trailer')
first two position of data file represents the level like
00-Header
01 to 98 -Detail
99 -Trailer
each level will have different data structure and we should insert in to the same table
i Have created table like
CREATE TABLE APPS.XXD_TEST1
AA NUMBER,
TEST12 VARCHAR2(10 BYTE),
testdt VARCHAR2(10 BYTE),
testtr VARCHAR2(10 BYTE),
RECORD_ID NUMBER
and created sequence for record_id column
--CREATE SEQUENCE APPS.XXD_TEST1_S
i have data in the data file like below, i want to load the data in the same order
000012
010012
010012
020012
030012
990012
000013
010013
020013
030013
990013
i was using the folowwing control file
LOAD DATA
INFILE Test
APPEND
INTO TABLE xxd_test1
WHEN (1:2) = '00'
TRAILING NULLCOLS
test12 POSITION(3:6) CHAR,
aa POSITION(1:2) INTEGER EXTERNAL "lpad(:aa,2,'0')",
record_id "xxd_test1_s.nextval"
INTO TABLE xxd_test1
WHEN (1:2) != '99' and (1:2) !='00'
TRAILING NULLCOLS
testdt POSITION(3:6) CHAR,
aa POSITION(1:2) INTEGER EXTERNAL "lpad(:aa,2,'0')",
record_id "xxd_test1_s.nextval"
INTO TABLE xxd_test1
WHEN (1:2) ='99'
TRAILING NULLCOLS
testtr POSITION(3:6) CHAR,
aa POSITION(1:2) INTEGER EXTERNAL ,
record_id "xxd_test1_s.nextval"
But it was inserted in the following order
000012
000013
010012
010012
020012
020013
030012
030013
990012
990013
Please help me with the solution.
Thanks
Sriram.Hi Karthick,
we can do the order by caluse if we are having any column common to all the three levels
here, for me record_type(first two positions) is the only common. but they may be duplicated in the file.
Sample Data file
000012
01
01
02
03
99
000013
01
02
03
99
(first two positions represent the heirarchy like 00-header,(01-10)-Detail, 99-Trailer)
this is sample file,it(detail,trailer) contains some extra fields also...but nothing is common to the header, detail and trailer.Can we generate any value which is common to the three levels? with respective to the header value!
Looking for you solution..
Regards,
Sriram. -
Hi there,
Thanks for checking this out.
I have a slight problm with my query. It's not causing any
errors at all, it's just not giving me the desired results I'm
trying to get.
<cfquery name="getSchemaFields" datasource="#request.dsn#"
username="#request.username#" password="#request.password#">
SELECT schema_#getSchemas.schema_token#_fields.*,
fields_content.*
FROM schema_#getSchemas.schema_token#_fields
LEFT JOIN fields_content
ON schema_#getSchemas.schema_token#_fields.field_type_uuid =
fields_content.field_content_field_uuid
WHERE fields_content.field_content_item_id =
#getSchemas.item_id#
AND fields_content.field_content_item_uuid =
'#getSchemas.item_uuid#'
</cfquery>
This query returns all the results for items in
"fields_content" where it matches in the "where" clause. But I need
the query to return all records from the
"schema_#getSchemas.schema_token#_fields" table regardless of
wether or not any records are found in the "fields_content" table.
I thought a LEFT JOIN would solve this and it does to a point.
If I remove the WHERE and AND clauses I get all the rows, but
I can't use this method because the records returned from
"fields_content" need to be specific to an ID I have in the page
(this comes from another query I do called "getSchemas").
So basically, it works but only outputs rows where it finds
it in both tables. If I take out there WHERE clause (which I need
it causes other problems with my site, I need it to only pull back
rows based on an ID)
Is this making any sense? Probably not...hope you can
understand, I'm getting mighty stressed at this one :-s
Any help whatsoever would be great.
Many thanks,
Mickey.Hi Draves,
Thanks for your response. I think I'm getting a little closer
because now I simply get a syntax error. Like you said, I think
it's something to do with paraenthesis. My query is now as follows:
<cfquery name="getSchemaFields" datasource="#request.dsn#"
username="#request.username#" password="#request.password#">
SELECT schema_#getSchemas.schema_token#_fields.*,
fields_content.*
FROM schema_#getSchemas.schema_token#_fields
LEFT JOIN fields_content
ON schema_#getSchemas.schema_token#_fields.field_type_uuid =
fields_content.field_content_field_uuid
AND ON fields_content.field_content_item_id =
<cfqueryparam cfsqltype="cf_sql_integer"
value="#getSchemas.item_id#" />
AND ON fields_content.field_content_item_uuid =
<cfqueryparam cfsqltype="cf_sql_varchar"
value="#getSchemas.item_uuid#" />
</cfquery>
But I get the following error (a bit nicer than before - if
that makes sense, but still puzzling):
[Macromedia][SequeLink JDBC Driver][ODBC
Socket][Microsoft][ODBC Microsoft Access Driver] Syntax error
(missing operator) in query expression ''.
The error occurred in
C:\ColdFusion8\wwwroot\coldbox\edit.cfm: line 152
150 : ON
schema_#getSchemas.schema_token#_fields.field_type_uuid =
fields_content.field_content_field_uuid
151 : AND ON fields_content.field_content_item_id =
<cfqueryparam cfsqltype="cf_sql_integer"
value="#getSchemas.item_id#" />
152 : AND ON fields_content.field_content_item_uuid =
<cfqueryparam cfsqltype="cf_sql_varchar"
value="#getSchemas.item_uuid#" />
153 : </cfquery>
Hope that you'd be able to assist further. I have no clue
where to put the paranthesis - I read the links you gave but they
confused the hell out of me!! Clearly I don't consider myself a
programmer, haha.
Many thansk for your kind help!
Mickey. -
Convert decode oracle pl/sq to ms sql and help required on logic
I have below oracle query need to converted to ms sql. I also want to add a record into journal table when a
insert portion is executed "caseidinserted" and update portion executed then "caseidupdate".
Update table1 target
set curr =
decode(
select efforts from (
select source.efforts efforts
from
SELECT a.aid,a.efforts,ab.lcs
FROM CIP a, DC ab
WHERE a id = ab.id
AND a.id = @id
) source
where target.caseid = @caseidupd
and target.aid = source.aid
) tmp, 0, tmp.efforts, curr
modi = getdate( )
where exists
select 1
from table1 tgt
where tgt.aid = target.aid
and tgt.caseid = @caseidupd
insert into table1 values(caseid, aid, modi)
select @caseidupd, source.aid, getdate()
from
SELECT a.aid,a.efforts,ab.lcs
FROM CIP a, DC ab
WHERE a id = ab.id
AND a.id = @id
) source
where not exists
select 1
from table1 target
where target.aid = source.aid
and target.caseid = @caseidupd
something like this...
INSERT (caseid,aid,modi)
select @caseidupd,'appupdated'+source.aid,getdate()
INSERT (caseid,aid,modi)
select (@caseidupd,'appinserted'+source.aid,getdate()Hello,
I am not familiar with Oracle Function. If I understand correctly, you can MERGE to perform INSERT and UPDATE operations on a table in a single statement. Please refer to the following statements:
MERGE INTO table1 AS Target
USING (select @caseidupd, source.aid, getdate()
from
SELECT a.aid,a.efforts,ab.lcs
FROM CIP a, DC ab
WHERE a id = ab.id
AND a.id = @id
) As Source (caseidupd,aid,date )
ON Target.aid = source.aid and target.caseid =source.caseidupd
WHEN MATCHED THEN
UPDATE SET Target.curr=...,--query for get values
Target.modi=getdate()
WHEN NOT MATCHED BY TARGET THEN
INSERT (caseid,aid,modi) values (caseidupd,'appupdated'+source.aid,getdate())
Reference:http://msdn.microsoft.com/en-us/library/bb510625.aspx
Regards,
Fanny Liu
Fanny Liu
TechNet Community Support -
Dynamic PL/SQL - Urgent help required
Hi there
I am trying to write a packaged function which takes the table name and column name as arguments and build a pl/sql table which the function returns.
Please do find the code below:
Create or Replace Package Pk_valid_values
is
TYPE list_rec is record ( lc_list_desc varchar2(50));
TYPE list_tab is TABLE of list_rec
index by binary_integer;
FUNCTION Fn_fetch_values
( p_table_name varchar2,
p_column_name varchar2 )
return list_tab;
End Pk_valid_values;
Create or Replace Package Body Pk_valid_values
as
FUNCTION Fn_fetch_values
( p_table_name varchar2,
p_column_name varchar2 )
return list_tab
is
l_values Pk_valid_values.list_tab;
i binary_integer := 0;
lc_element varchar2(50);
ln_dummy number;
v_cursor integer;
lc_string varchar2(2000);
ln_count number;
BEGIN
ln_count := Pk_count_record.Count_record(p_table_name);
v_cursor := dbms_sql.open_cursor;
lc_string := 'begin select p_column_name into :felement from '||
p_table_name||' ; end;';
dbms_sql.parse( v_cursor,
lc_string,
dbms_sql.native );
dbms_sql.bind_variable( v_cursor,
':felement',
lc_element );
ln_dummy := dbms_sql.execute( v_cursor );
for i in 1..ln_count loop
dbms_sql.variable_value( v_cursor,
':felement',
lc_element );
l_values(i) := lc_element;
end loop;
dbms_sql.close_cursor( v_cursor );
return( l_values );
END Fn_fetch_values;
End Pk_valid_values;
I get an error "PLS-00382: expression is of wrong type" when I try to create this package.
Could anyone please let me know where I have gone wrong?
I have really burst my heads against this.
Thanks in advance
RajeevHi,
I think it is that you declare a PL/SQL block, not a cursor.
Try to replace :
lc_string := 'begin select p_column_name into :felement from '||
p_table_name||' ; end;';
with :
lc_string := 'select ' || p_column_name || ' from ' || p_table_name;
Or an easier way :
declare
TYPE RefCurTyp IS REF CURSOR;
cr RefCurTyp;
lc_element varchar2(50);
begin
OPEN cr FOR 'select ' || p_column_name || ' from ' || p_table_name;
LOOP
FETCH cr INTO lc_element;
EXIT WHEN cr%NOTFOUND;
END LOOP;
CLOSE cr;
end;
/Uffe -
Help - Bean Binding an SQL join to a gui component(jtable) in Netbeans?
Good afternoon. I'd like to ask if there is a way to data bind an SQL Join from 2 or more tables to a
GUI component(Jtable) in Netbeans. All the tutorials show is how to bind all the fields of 1 database table
to the component. Under the BIND/ELements option the IMPORT DATA TO FORM menu only allows
you to choose 1 among the database tables from a selected database.
Is there a way to configure an SQL query and attach it to the component?
Thanks.This is not a Swing problem. Try a NetBeans forum.
-
How to group using SQL for the required output.
hi all,
i'm currently using oracle 10.2.0.4.0
create table script :
CREATE TABLE FORTEST
( gpno VARCHAR2(10 BYTE),
classnumber VARCHAR2(10 byte),
age_min NUMBER,
age_max NUMBER,
amount NUMBER)insert statement:
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 01,0,29,1)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 01,30,35,2)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 01,36,40,3)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 02,0,29,1)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 02,30,35,2)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 02,36,40,5)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 03,0,29,1)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 03,30,35,2)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G123' , 03,36,40,3)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G124' , 01,0,29,1)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G124' , 01,30,35,2)
insert into fortest (GPNO,classnumber,age_min,age_max,amount) values
('G124' , 01,36,40,3) output required:
gpno classnumber age_min age_max amount
G123 1,3 0 29 1
G123 1,3 30 35 2
G123 1,3 36 40 3
G123 2 0 29 1
G123 2 30 35 2
G123 2 36 40 5
G124 1 0 29 1
G124 1 30 35 2
G124 1 36 40 3since for gpno g123, classnumber 1 and 3, the rates are same across all age_min and age_max they need to be grouped together.
even though gpno 123 classnumber 2 has same rates as classesnumber 1 and 3 for age bands 0 to 29 and 30 to 35,
the rates are different for age bands 36 to 40. so it should not be grouped together. how can i do this in SQL
any help is appreciated.
thanks in advance.Hi,
Tricky problem!
Unfortunately, LISTAGG was only introduced in Oracle 11.2. About half of the complexity here is the string aggregation, that is, forming the list of classnumbers, such as '1,3', using only functions available in Oracle 10.2.
Here's one solution:
WITH got_gpno_classnumber_cnt AS
SELECT gpno, classnumber, age_min, age_max, amount
, COUNT (*) OVER ( PARTITION BY gpno
, classnumber
) AS gpno_classnumber_cnt
FROM fortest
-- WHERE ... -- If you need any filtering, this is where it goes
, pairs AS
SELECT a.gpno
, a.classnumber
, MIN (b.classnumber)
OVER ( PARTITION BY a.gpno
, a.classnumber
) AS super_classnumber
FROM got_gpno_classnumber_cnt a
JOIN got_gpno_classnumber_cnt b ON a.gpno = b.gpno
AND a.age_min = b.age_min
AND a.age_max = b.age_max
AND a.amount = b.amount
AND a.gpno_classnumber_cnt
= b.gpno_classnumber_cnt
GROUP BY a.gpno
, a.classnumber
, b.classnumber
HAVING COUNT (*) = MIN (a.gpno_classnumber_cnt)
, got_rnk AS
SELECT DISTINCT
gpno, classnumber, super_classnumber
, DENSE_RANK () OVER ( PARTITION BY gpno
, super_classnumber
ORDER BY classnumber
) AS rnk
FROM pairs
, got_classnumbers AS
SELECT gpno, classnumber, super_classnumber
, SUBSTR ( SYS_CONNECT_BY_PATH (classnumber, ',')
, 2
) AS classnumbers
FROM got_rnk
WHERE CONNECT_BY_ISLEAF = 1
START WITH rnk = 1
CONNECT BY rnk = PRIOR rnk + 1
AND gpno = PRIOR gpno
AND super_classnumber = PRIOR super_classnumber
SELECT DISTINCT
g.gpno
, c.classnumbers
, g.age_min
, g.age_max
, g.amount
FROM got_gpno_classnumber_cnt g
JOIN got_classnumbers c ON c.gpno = g.gpno
AND c.classnumber = g.classnumber
ORDER BY g.gpno
, c.classnumbers
;Output (just as you requested):
GPNO CLASSNUMBERS AGE_MIN AGE_MAX AMOUNT
G123 1,3 0 29 1
G123 1,3 30 35 2
G123 1,3 36 40 3
G123 2 0 29 1
G123 2 30 35 2
G123 2 36 40 5
G124 1 0 29 1
G124 1 30 35 2
G124 1 36 40 3 -
Hi,
I need some help on tuning this sql. We run a third party application and I have to ask thrid party for any changes. I have pasted the session statistice from the run for this sql.
SELECT DECODE( RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,
' ')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' '),
RPAD(NVL(:zipout1,' '),4,' ')||RPAD(NVL(:zipin1,' '),3,' '),
'0001', RPAD(NVL(:zipout2,' '),4,'
')||RPAD(SUBSTR(NVL(:zipin2,' '),0,1),3,' '), '0002',
RPAD(NVL(:zipout3,' '),7,' '), '0003',
RPAD('ZZ999',7,' '), '0004' ) AS CHECKER
FROM NWKPCDREC
WHERE NWKPCDNETWORKID = :netid
AND NWKPCDSORTPOINT1TYPE != 'XXXXXXXX'
AND ( (RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,' ')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') =
RPAD(NVL(:zipout4,' '),4,' ')||RPAD(NVL(:zipin3,' '),3,' '))
OR (RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,'
')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') =
RPAD(NVL(:zipout5,' '),4,' ')||RPAD(SUBSTR(NVL(:zipin4,' '),0,
1),3,' ')) OR (RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,'
')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') =
RPAD(NVL(:zipout6,' '),7,' ')) OR
(RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,'
')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') = RPAD('ZZ999',7,
' ')) ) ORDER BY CHECKER
Session Statistics 09 October 2007 22:44:56 GMT+00:00
Report Target : PRD1 (Database)
Session Statistics
(Chart form was tabular, see data table below)
SID Name Value Class
37 write clones created in foreground 0 Cache
37 write clones created in background 0 Cache
37 user rollbacks 16 User
37 user commits 8674 User
37 user calls 302838 User
37 transaction tables consistent reads - undo records applied 0 Debug
37 transaction tables consistent read rollbacks 0 Debug
37 transaction rollbacks 9 Debug
37 transaction lock foreground wait time 0 Debug
37 transaction lock foreground requests 0 Debug
37 transaction lock background gets 0 Debug
37 transaction lock background get time 0 Debug
37 total file opens 12 Cache
37 table scans (short tables) 8062 SQL
37 table scans (rowid ranges) 0 SQL
37 table scans (long tables) 89 SQL
37 table scans (direct read) 0 SQL
37 table scans (cache partitions) 2 SQL
37 table scan rows gotten 487042810 SQL
37 table scan blocks gotten 7327924 SQL
37 table fetch continued row 17 SQL
37 table fetch by rowid 26130550 SQL
37 switch current to new buffer 6400 Cache
37 summed dirty queue length 0 Cache
37 sorts (rows) 138607 SQL
37 sorts (memory) 13418 SQL
37 sorts (disk) 0 SQL
37 session uga memory max 5176776 User
37 session uga memory 81136 User
37 session stored procedure space 0 User
37 session pga memory max 5559884 User
37 session pga memory 5559884 User
37 session logical reads 115050107 User
37 session cursor cache hits 0 SQL
37 session cursor cache count 0 SQL
37 session connect time 1191953042 User
37 serializable aborts 0 User
37 rows fetched via callback 1295545 SQL
37 rollbacks only - consistent read gets 0 Debug
37 rollback changes - undo records applied 114 Debug
37 remote instance undo header writes 0 Global Cache
37 remote instance undo block writes 0 Global Cache
37 redo writes 0 Redo
37 redo writer latching time 0 Redo
37 redo write time 0 Redo
37 redo wastage 0 Redo
37 redo synch writes 8683 Cache
37 redo synch time 722 Cache
37 redo size 25463692 Redo
37 redo ordering marks 0 Redo
37 redo log switch interrupts 0 Redo
37 redo log space wait time 0 Redo
37 redo log space requests 1 Redo
37 redo entries 81930 Redo
37 redo buffer allocation retries 1 Redo
37 redo blocks written 0 Redo
37 recursive cpu usage 101 User
37 recursive calls 84413 User
37 recovery blocks read 0 Cache
37 recovery array reads 0 Cache
37 recovery array read time 0 Cache
37 queries parallelized 0 Parallel Server
37 process last non-idle time 1191953042 Debug
37 prefetched blocks aged out before use 0 Cache
37 prefetched blocks 1436767 Cache
37 pinned buffers inspected 89 Cache
37 physical writes non checkpoint 3507 Cache
37 physical writes direct (lob) 0 Cache
37 physical writes direct 3507 Cache
37 physical writes 3507 Cache
37 physical reads direct (lob) 0 Cache
37 physical reads direct 2499 Cache
37 physical reads 1591668 Cache
37 parse time elapsed 336 SQL
37 parse time cpu 315 SQL
37 parse count (total) 28651 SQL
37 parse count (hard) 1178 SQL
37 opens requiring cache replacement 0 Cache
37 opens of replaced files 0 Cache
37 opened cursors current 51 User
37 opened cursors cumulative 28651 User
37 no work - consistent read gets 59086317 Debug
37 no buffer to keep pinned count 0 Other
37 next scns gotten without going to DLM 0 Parallel Server
37 native hash arithmetic fail 0 SQL
37 native hash arithmetic execute 0 SQL
37 messages sent 9730 Debug
37 messages received 0 Debug
37 logons current 1 User
37 logons cumulative 1 User
37 leaf node splits 111 Debug
37 kcmgss waited for batching 0 Parallel Server
37 kcmgss read scn without going to DLM 0 Parallel Server
37 kcmccs called get current scn 0 Parallel Server
37 instance recovery database freeze count 0 Parallel Server
37 index fast full scans (rowid ranges) 0 SQL
37 index fast full scans (full) 210 SQL
37 index fast full scans (direct read) 0 SQL
37 immediate (CURRENT) block cleanout applications 4064 Debug
37 immediate (CR) block cleanout applications 83 Debug
37 hot buffers moved to head of LRU 20004 Cache
37 global lock sync gets 0 Parallel Server
37 global lock sync converts 0 Parallel Server
37 global lock releases 0 Parallel Server
37 global lock get time 0 Parallel Server
37 global lock convert time 0 Parallel Server
37 global lock async gets 0 Parallel Server
37 global lock async converts 0 Parallel Server
37 global cache read buffer lock timeouts 0 Global Cache
37 global cache read buffer blocks served 0 Global Cache
37 global cache read buffer blocks received 0 Global Cache
37 global cache read buffer block timeouts 0 Global Cache
37 global cache read buffer block send time 0 Global Cache
37 global cache read buffer block receive time 0 Global Cache
37 global cache read buffer block build time 0 Global Cache
37 global cache prepare failures 0 Global Cache
37 global cache gets 0 Global Cache
37 global cache get time 0 Global Cache
37 global cache freelist waits 0 Global Cache
37 global cache defers 0 Global Cache
37 global cache cr timeouts 0 Global Cache
37 global cache cr requests blocked 0 Global Cache
37 global cache cr blocks served 0 Global Cache
37 global cache cr blocks received 0 Global Cache
37 global cache cr block send time 0 Global Cache
37 global cache cr block receive time 0 Global Cache
37 global cache cr block flush time 0 Global Cache
37 global cache cr block build time 0 Global Cache
37 global cache converts 0 Global Cache
37 global cache convert timeouts 0 Global Cache
37 global cache convert time 0 Global Cache
37 global cache blocks corrupt 0 Global Cache
37 free buffer requested 1597281 Cache
37 free buffer inspected 659 Cache
37 execute count 128826 SQL
37 exchange deadlocks 1 Cache
37 enqueue waits 0 Enqueue
37 enqueue timeouts 0 Enqueue
37 enqueue requests 23715 Enqueue
37 enqueue releases 23715 Enqueue
37 enqueue deadlocks 0 Enqueue
37 enqueue conversions 0 Enqueue
37 dirty buffers inspected 437 Cache
37 deferred (CURRENT) block cleanout applications 21937 Debug
37 db block gets 230801 Cache
37 db block changes 160407 Cache
37 data blocks consistent reads - undo records applied 460 Debug
37 cursor authentications 488 Debug
37 current blocks converted for CR 0 Cache
37 consistent gets 114819307 Cache
37 consistent changes 460 Cache
37 commit cleanouts successfully completed 37201 Cache
37 commit cleanouts 37210 Cache
37 commit cleanout failures: write disabled 0 Cache
37 commit cleanout failures: hot backup in progress 0 Cache
37 commit cleanout failures: cannot pin 0 Cache
37 commit cleanout failures: callback failure 3 Cache
37 commit cleanout failures: buffer being written 0 Cache
37 commit cleanout failures: block lost 6 Cache
37 cold recycle reads 0 Cache
37 cluster key scans 17 SQL
37 cluster key scan block gets 36 SQL
37 cleanouts only - consistent read gets 83 Debug
37 cleanouts and rollbacks - consistent read gets 0 Debug
37 change write time 108 Cache
37 calls to kcmgrs 0 Debug
37 calls to kcmgcs 391 Debug
37 calls to kcmgas 8816 Debug
37 calls to get snapshot scn: kcmgss 171453 Parallel Server
37 bytes sent via SQL*Net to dblink 0 User
37 bytes sent via SQL*Net to client 25363874 User
37 bytes received via SQL*Net from dblink 0 User
37 bytes received via SQL*Net from client 29829542 User
37 buffer is pinned count 540816 Other
37 buffer is not pinned count 86108905 Other
37 branch node splits 6 Debug
37 background timeouts 0 Debug
37 background checkpoints started 0 Cache
37 background checkpoints completed 0 Cache
37 Unnecesary process cleanup for SCN batching 0 Parallel Server
37 SQL*Net roundtrips to/from dblink 0 User
37 SQL*Net roundtrips to/from client 302837 User
37 Parallel operations not downgraded 0 Parallel Server
37 Parallel operations downgraded to serial 0 Parallel Server
37 Parallel operations downgraded 75 to 99 pct 0 Parallel Server
37 Parallel operations downgraded 50 to 75 pct 0 Parallel Server
37 Parallel operations downgraded 25 to 50 pct 0 Parallel Server
37 Parallel operations downgraded 1 to 25 pct 0 Parallel Server
37 PX remote messages sent 0 Parallel Server
37 PX remote messages recv'd 0 Parallel Server
37 PX local messages sent 0 Parallel Server
37 PX local messages recv'd 0 Parallel Server
37 OS Voluntary context switches 0 OS
37 OS User time used 0 OS
37 OS System time used 0 OS
37 OS Swaps 0 OS
37 OS Socket messages sent 0 OS
37 OS Socket messages received 0 OS
37 OS Signals received 0 OS
37 OS Page reclaims 0 OS
37 OS Page faults 0 OS
37 OS Maximum resident set size 0 OS
37 OS Involuntary context switches 0 OS
37 OS Integral unshared stack size 0 OS
37 OS Integral unshared data size 0 OS
37 OS Integral shared text size 0 OS
37 OS Block output operations 0 OS
37 OS Block input operations 0 OS
37 DML statements parallelized 0 Parallel Server
37 DFO trees parallelized 0 Parallel Server
37 DDL statements parallelized 0 Parallel Server
37 DBWR undo block writes 0 Cache
37 DBWR transaction table writes 0 Cache
37 DBWR summed scan depth 0 Cache
37 DBWR revisited being-written buffer 0 Cache
37 DBWR make free requests 0 Cache
37 DBWR lru scans 0 Cache
37 DBWR free buffers found 0 Cache
37 DBWR cross instance writes 0 Global Cache
37 DBWR checkpoints 0 Cache
37 DBWR checkpoint buffers written 0 Cache
37 DBWR buffers scanned 0 Cache
37 Commit SCN cached 0 Debug
37 Cached Commit SCN referenced 1 Debug
37 CR blocks created 203 Cache
37 CPU used when call started 280528 Debug
37 CPU used by this session 280528 User
Regards
Raj
--------------------------------------------------------------------------------Thank you everybody for helping me out while tuning the query. I have managed to bring down the run time from 60 minutes to 12 minutes.
I am posting the exisitng query, existing database objects ddl and the new query and new ddl to share my learning. This is my first use of forum, senior members, please letme know if I shouldn't have put all this here.
/pre original code
SELECT decode(rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
a.nwkpcdinwdpostcode, ' '), 3, ' '), rpad(nvl(:zipout1, ' '), 4, ' ')
|| rpad(nvl(:zipin1, ' '), 3, ' '), '0001', rpad(nvl(:zipout2, ' '), 4,
' ') || rpad(substr(nvl(:zipin2, ' '), 0, 1), 3, ' '), '0002',
rpad(nvl(:zipout3, ' '), 7, ' '), '0003', rpad('ZZ999', 7, ' '), '0004')
AS checker, a.nwkpcdbarcode1to7 nwkpcdbarcode1to7,
a.nwkpcdbarcode15 nwkpcdbarcode15,
a.nwkpcdbarcodeseqkey nwkpcdbarcodeseqkey,
a.nwkpcdsortpoint1code nwkpcdsortpoint1code,
a.nwkpcdsortpoint1type nwkpcdsortpoint1type,
a.nwkpcdsortpoint1name nwkpcdsortpoint1name,
a.nwkpcdsortpoint1extra nwkpcdsortpoint1extra,
a.nwkpcdsortpoint2type nwkpcdsortpoint2type,
a.nwkpcdsortpoint2name nwkpcdsortpoint2name,
a.nwkpcdsortpoint3type nwkpcdsortpoint3type,
a.nwkpcdsortpoint3name nwkpcdsortpoint3name,
a.nwkpcdsortpoint4type nwkpcdsortpoint4type,
a.nwkpcdsortpoint4name nwkpcdsortpoint4name,
b.nwkprfnetworksequence nwkprfnetworksequence,
b.nwkprfnetworkid nwkprfnetworkid, b.nwkprfnetworkname nwkprfnetworkname,
b.nwkprfminweight / 100 AS nwkprfminweight, b.nwkprfmaxweight / 100 AS
nwkprfmaxweight, b.nwkprfminlengthgirth nwkprfminlengthgirth,
b.nwkprfmaxlengthgirth nwkprfmaxlengthgirth,
b.nwkprfminlength nwkprfminlength, b.nwkprfmaxlength nwkprfmaxlength,
b.nwkprfparceltypecode nwkprfparceltypecode,
b.nwkprfparceltypename nwkprfparceltypename
FROM wh1.nwkpcdrec a, wh1.nwkprefrec b
WHERE a.nwkpcdnetworkid = b.nwkprfnetworkid
AND a.nwkpcdsortpoint1type != 'XXXXXXXX'
AND (rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad(nvl(:zipout4, ' '), 4, ' '
) || rpad(nvl(:zipin3, ' '), 3, ' ')
OR rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad(nvl(:zipout5, ' '), 4, ' '
) || rpad(substr(nvl(:zipin4, ' '), 0, 1), 3, ' ')
OR rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad(nvl(:zipout6, ' '), 7, ' '
OR rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad('ZZ999', 7, ' '))
AND :weight1 >= b.nwkprfminweight
AND :weight2 <= b.nwkprfmaxweight
AND b.nwkprfminlengthgirth <= 60
AND b.nwkprfmaxlengthgirth >= 60
AND b.nwkprfminlength <= 15
AND b.nwkprfmaxlength >= 15
ORDER BY b.nwkprfnetworkid, checker
CREATE TABLE "WH1"."NWKPCDREC" ("NWKPCDFILECODE" VARCHAR2(2),
"NWKPCDRECORDTYPE" VARCHAR2(4), "NWKPCDNETWORKID" VARCHAR2(2),
"NWKPCDOUTWDPOSTCODE" VARCHAR2(4), "NWKPCDINWDPOSTCODE"
VARCHAR2(3), "NWKPCDSORTPOINT1CODE" VARCHAR2(2),
"NWKPCDSORTPOINT1TYPE" VARCHAR2(8), "NWKPCDSORTPOINT1NAME"
VARCHAR2(16), "NWKPCDSORTPOINT1EXTRA" VARCHAR2(16),
"NWKPCDSORTPOINT2TYPE" VARCHAR2(8), "NWKPCDSORTPOINT2NAME"
VARCHAR2(8), "NWKPCDSORTPOINT3TYPE" VARCHAR2(8),
"NWKPCDSORTPOINT3NAME" VARCHAR2(8), "NWKPCDSORTPOINT4TYPE"
VARCHAR2(8), "NWKPCDSORTPOINT4NAME" VARCHAR2(8), "NWKPCDPPI"
VARCHAR2(8), "NWKPCDBARCODE1TO7" VARCHAR2(7),
"NWKPCDBARCODE15" VARCHAR2(1), "NWKPCDBARCODESEQKEY"
VARCHAR2(7), "NWKPCDFILLER1" VARCHAR2(7), "NWKPCDFILLER2"
VARCHAR2(30),
CONSTRAINT "UK_NWKPCDREC" UNIQUE("NWKPCDNETWORKID",
"NWKPCDOUTWDPOSTCODE", "NWKPCDINWDPOSTCODE")
USING INDEX
TABLESPACE "WH1_INDEX"
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
PCTFREE 10 INITRANS 2 MAXTRANS 255)
TABLESPACE "WH1_DATA_LARGE" PCTFREE 10 PCTUSED 40 INITRANS 1
MAXTRANS 255
STORAGE ( INITIAL 4096K NEXT 4096K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
NOLOGGING
pre original script/
/pre modified script
CREATE TABLE "WH1"."NWKPCEREC_OLD" ("NWKPCDFILECODE" VARCHAR2(2),
"NWKPCDRECORDTYPE" VARCHAR2(4), "NWKPCDNETWORKID" VARCHAR2(2),
"NWKPCDOUTWDPOSTCODE" VARCHAR2(4), "NWKPCDINWDPOSTCODE"
VARCHAR2(3), "NWKPCDSORTPOINT1CODE" VARCHAR2(2),
"NWKPCDSORTPOINT1TYPE" VARCHAR2(8), "NWKPCDSORTPOINT1NAME"
VARCHAR2(16), "NWKPCDSORTPOINT1EXTRA" VARCHAR2(16),
"NWKPCDSORTPOINT2TYPE" VARCHAR2(8), "NWKPCDSORTPOINT2NAME"
VARCHAR2(8), "NWKPCDSORTPOINT3TYPE" VARCHAR2(8),
"NWKPCDSORTPOINT3NAME" VARCHAR2(8), "NWKPCDSORTPOINT4TYPE"
VARCHAR2(8), "NWKPCDSORTPOINT4NAME" VARCHAR2(8), "NWKPCDPPI"
VARCHAR2(8), "NWKPCDBARCODE1TO7" VARCHAR2(7),
"NWKPCDBARCODE15" VARCHAR2(1), "NWKPCDBARCODESEQKEY"
VARCHAR2(7), "NWKPCDFILLER1" VARCHAR2(7), "NWKPCDFILLER2"
VARCHAR2(30))
TABLESPACE "WH1_DATA_LARGE" PCTFREE 10 PCTUSED 40 INITRANS 1
MAXTRANS 255
STORAGE ( INITIAL 4096K NEXT 4096K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
NOLOGGING
insert into wh1.nwkpcdrec_old select * from wh1.nwkpcdrec;
drop table wh1.nwkpcdrec;
CREATE TABLE "WH1"."NWKPCDREC" ("NWKPCDFILECODE" VARCHAR2(2),
"NWKPCDRECORDTYPE" VARCHAR2(4), "NWKPCDNETWORKID" VARCHAR2(2),
"NWKPCDOUTINWDPOSTCODE" VARCHAR2(7) NOT NULL,
"NWKPCDOUTWDPOSTCODE" VARCHAR2(4), "NWKPCDINWDPOSTCODE"
VARCHAR2(3), "NWKPCDSORTPOINT1CODE" VARCHAR2(2),
"NWKPCDSORTPOINT1TYPE" VARCHAR2(8), "NWKPCDSORTPOINT1NAME"
VARCHAR2(16), "NWKPCDSORTPOINT1EXTRA" VARCHAR2(16),
"NWKPCDSORTPOINT2TYPE" VARCHAR2(8), "NWKPCDSORTPOINT2NAME"
VARCHAR2(8), "NWKPCDSORTPOINT3TYPE" VARCHAR2(8),
"NWKPCDSORTPOINT3NAME" VARCHAR2(8), "NWKPCDSORTPOINT4TYPE"
VARCHAR2(8), "NWKPCDSORTPOINT4NAME" VARCHAR2(8), "NWKPCDPPI"
VARCHAR2(8), "NWKPCDBARCODE1TO7" VARCHAR2(7),
"NWKPCDBARCODE15" VARCHAR2(1), "NWKPCDBARCODESEQKEY"
VARCHAR2(7), "NWKPCDFILLER1" VARCHAR2(7), "NWKPCDFILLER2"
VARCHAR2(30))
TABLESPACE "WH1_DATA_LARGE" PCTFREE 10 PCTUSED 40 INITRANS 1
MAXTRANS 255
STORAGE ( INITIAL 4096K NEXT 4096K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
NOLOGGING
INSERT INTO WH1.NWKPCDREC SELECT
NWKPCDFILECODE,
NWKPCDRECORDTYPE,
NWKPCDNETWORKID,
rpad(nvl(nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(nwkpcdinwdpostcode, ' '), 3, ' '),
nwkpcdoutwdpostcode,
nwkpcdinwdpostcode,
NWKPCDSORTPOINT1CODE,
NWKPCDSORTPOINT1TYPE,
NWKPCDSORTPOINT1NAME,
NWKPCDSORTPOINT1EXTRA,
NWKPCDSORTPOINT2TYPE,
NWKPCDSORTPOINT2NAME,
NWKPCDSORTPOINT3TYPE,
NWKPCDSORTPOINT3NAME,
NWKPCDSORTPOINT4TYPE,
NWKPCDSORTPOINT4NAME,
NWKPCDPPI,
NWKPCDBARCODE1TO7,
NWKPCDBARCODE15,
NWKPCDBARCODESEQKEY,
NWKPCDFILLER1,
NWKPCDFILLER2
FROM WH1.NWKPCDREC_OLD;
CREATE UNIQUE INDEX "WH1"."UK_NWKPCDREC"
ON "WH1"."NWKPCDREC" ("NWKPCDNETWORKID",
"NWKPCDOUTINWDPOSTCODE")
TABLESPACE "WH1_INDEX" PCTFREE 10 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 8192K NEXT 8192K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
LOGGING
begin
dbms_stats.gather_table_stats(ownname=> 'WH1', tabname=> 'NWKPCDREC', partname=> NULL);
end;
begin
dbms_stats.gather_index_stats(ownname=> 'WH1', indname=> 'UK_NWKPCDREC', partname=> NULL);
end;
SELECT decode(a.nwkpcdoutinwdpostcode, rpad(nvl(:zipout1, ' '), 4, ' ') ||
rpad(nvl(:zipin1, ' '), 3, ' '), '0001', rpad(nvl(:zipout2, ' '), 4, ' '
) || rpad(substr(nvl(:zipin2, ' '), 0, 1), 3, ' '), '0002', rpad(
nvl(:zipout3, ' '), 7, ' '), '0003', rpad('ZZ999', 7, ' '), '0004') AS
checker, a.nwkpcdbarcode1to7 nwkpcdbarcode1to7,
a.nwkpcdbarcode15 nwkpcdbarcode15,
a.nwkpcdbarcodeseqkey nwkpcdbarcodeseqkey,
a.nwkpcdsortpoint1code nwkpcdsortpoint1code,
a.nwkpcdsortpoint1type nwkpcdsortpoint1type,
a.nwkpcdsortpoint1name nwkpcdsortpoint1name,
a.nwkpcdsortpoint1extra nwkpcdsortpoint1extra,
a.nwkpcdsortpoint2type nwkpcdsortpoint2type,
a.nwkpcdsortpoint2name nwkpcdsortpoint2name,
a.nwkpcdsortpoint3type nwkpcdsortpoint3type,
a.nwkpcdsortpoint3name nwkpcdsortpoint3name,
a.nwkpcdsortpoint4type nwkpcdsortpoint4type,
a.nwkpcdsortpoint4name nwkpcdsortpoint4name,
b.nwkprfnetworksequence nwkprfnetworksequence,
b.nwkprfnetworkid nwkprfnetworkid, b.nwkprfnetworkname nwkprfnetworkname,
b.nwkprfminweight / 100 AS nwkprfminweight, b.nwkprfmaxweight / 100 AS
nwkprfmaxweight, b.nwkprfminlengthgirth nwkprfminlengthgirth,
b.nwkprfmaxlengthgirth nwkprfmaxlengthgirth,
b.nwkprfminlength nwkprfminlength, b.nwkprfmaxlength nwkprfmaxlength,
b.nwkprfparceltypecode nwkprfparceltypecode,
b.nwkprfparceltypename nwkprfparceltypename
FROM wh1.nwkpcdrec a, wh1.nwkprefrec b
WHERE a.nwkpcdnetworkid = b.nwkprfnetworkid
AND a.nwkpcdoutinwdpostcode IN (rpad(nvl(:zipout4, ' '), 4, ' ') ||
rpad(nvl(:zipin3, ' '), 3, ' '), rpad(nvl(:zipout5, ' '), 4, ' ')
|| rpad(substr(nvl(:zipin4, ' '), 0, 1), 3, ' '), rpad(nvl(:zipout6,
' '), 7, ' '), rpad('ZZ999', 7, ' '))
AND a.nwkpcdsortpoint1type != 'XXXXXXXX'
AND :weight1 >= b.nwkprfminweight
AND :weight2 <= b.nwkprfmaxweight
AND b.nwkprfminlengthgirth <= 60
AND b.nwkprfmaxlengthgirth >= 60
AND b.nwkprfminlength <= 15
AND b.nwkprfmaxlength >= 15
ORDER BY b.nwkprfnetworkid, checker
pre modified script/ -
Advance aggreate function: help required
Hi All, Pls help me in solving the below requirement
Sample Data:
F1 F2 F3
[email protected] A 1
[email protected] B 1
[email protected] A 2
[email protected] A 1
Unique combination of F2 & F3 to be treated as a account.
Need to find the total accounts related to the domain along
with Unique emailID's and the accounts related to each email.
Required Output:
o1 o2 o3 o4
d1.com [email protected] 3 2
d1.com [email protected] 3 1
d1.com [email protected] 3 1
o1: Domain
o2: Unique email ID's in the Domain
o3: Unique accounts accessible by Domain
o4: Unique accounts accessible by Email
I'm able to get o1, o2 & o4 with the following sql
SELECT a.domain, a.F1, COUNT (a.rnum)
FROM (SELECT UNIQUE ROWNUM rnum,
SUBSTR (TRIM (F1),
INSTR (TRIM (F1), '@') + 1
) AS domain,
F1, F2, F3
FROM tab1
WHERE F1 LIKE '%d1.com%') a
GROUP BY a.domain, a.F1
Pls help me in completing this sql for the required output.
Thanks :-)What version/edition of Oracle are you using? Can you use analytics?
SELECT a.domain, a.F1, COUNT (a.rnum),
count(a.domain) over (partition by a.domain) domain_count
FROM (SELECT UNIQUE ROWNUM rnum,
SUBSTR (TRIM (F1),
INSTR (TRIM (F1), '@') + 1
) AS domain,
F1, F2, F3
FROM tab1
WHERE F1 LIKE '%d1.com%') a
GROUP BY a.domain, a.F1;
DOMAIN F1 COUNT(A.RNUM) DOMAIN_COUNT
d1.com [email protected] 2 3
d1.com [email protected] 1 3
d1.com [email protected] 1 3 -
SQL JOIN with BPM sql component
Hello friends.
How to use SQL JOIN with BPM sql component?
The tables objects are created but the joined tables belong to different sql components .
I tried something like that, but a error "table doesn't exist" occours.
Ex:
for each element in
SELECT imuImovelCd
FROM IMOVEIS_URBANOS,
Integracao.FGLP.IMOVEIS_PRE_EDITAIS
WHERE IMOVEIS_URBANOS.imuImovelCd = Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipeImuCd
AND Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedNr = 1
AND Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedAa = 2008
do
extend this.imoveis using cdImovel = element.imuimovelcd,
nrImovel = call(DEC_ENDERECO, codimovel : element.imuimovelcd, tipoimovel : 1)
end
Edited by: user9008295 on 26/01/2010 05:19ok, ok you are right.
When I try use SQL Statement to make a JOIN with 2 tables on different sql objects, BPM returns "table dosn't exists".
So.... I change my code. I dont know if this is the best way to do, but... i hope u, or everyone, can help me to do a best work.
This code works fine.
for each element in
SELECT ipeImuCd
FROM Integracao.FGLP.IMOVEIS_PRE_EDITAIS
WHERE Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedNr = 1
AND Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedAa = 2008
do
for each element2 in
SELECT imuImovelDv
FROM IMOVEIS_URBANOS
WHERE imuImovelCd = element.ipeImuCd
do
extend this.imoveis using cdDvImovel = String(element2.imuImovelDv),
cdImovel = Decimal(element.ipeImuCd),
endereco = call(DEC_ENDERECO, codimovel : element.ipeImuCd, tipoimovel : 1)
end
end
Thx a lot!!! -
Converting oracle join to Ansi sql join
Hi Guys,
I am new to SQL and trying to convert the following Oracle query (joins) into ANSI sql joins...Can someone please help me?
SELECT M.EXTERNALCODE, M.NAME AS MNAME, SC.BIRIM, SM.TRANSACTIONDATE, SMD.AMOUNT,
SMD.UNITPRICE, SM.ID AS SMID, SMD.ID AS SMDID, F.NAME AS FNAME,
IFNULL (SMD.AMOUNT, 0, SMD.AMOUNT) * IFNULL (SMD.UNITPRICE, 0, SMD.UNITPRICE) AS TOTALPRICE, SMD.AMOUNT AS RECEIVED_QUANTITY,
PD.ORDERID, PD.AMOUNT QUANTITY, PO.PROCESSDATE
FROM STOCKMAINTRANSACTION SM,
STOCKMAINTRANSACTIONDETAIL SMD,
MATERIAL M,
STOCKCARD SC,
FVSTOCK FVS,
FIRM F,
PURCHASEORDER PO,
PURCHASEORDERDETAIL PD,
PURCHASEORDERDETAILSUPPLIED PDS
WHERE SM.ID = SMD.MAINTRANSACTIONID
AND SMD.MATERIALID = M.ID
AND SMD.STOCKCARDID = SC.ID
AND SM.PROPREF = FVS.RECORDID(+)
AND FVS.FIELDID(+) = 2559
AND FVS.FLEVEL(+) = 'F'
AND F.ID(+) = SUBSTR (FVS.FVALUE, 1, 9)
AND SM.TRANSDEFID in (999,2329,2344,2370,150000903,150005362)
AND SMD.CANCELLED = 0
AND SMD.STOCKUPDATED = 1
AND SMD.ID = PDS.STOCKMAINTRANSACTIONDETAILID
AND PDS.ORDERDETAILID = PD.ORDERDETAILID
AND PO.ORDERID = PD.ORDERID
AND (M.ID = {@MATERIALID@} OR {@MATERIALID@} = 0)
AND (SM.STOREID = {@STOREID@} OR {@STOREID@} = 0)
AND (F.ID = {@SUPPLIERID@} OR {@SUPPLIERID@} = 0)
AND SM.TRANSACTIONDATE BETWEEN {@STARTDATE@} AND {@ENDDATE@}
ORDER BY F.NAME, M.EXTERNALCODE, SM.TRANSACTIONDATE
Really appreciate the help!
Thanks.Hi,
Welcome to the forum!
To convert to ANSI syntax, replace join conditions in the WHERE clause
FROM x
, y
WHERE x.x1 = y.y1
AND x.x2 = y.y2with ON conditions in the FROM clause:
FROM x
JOIN y ON x.x1 = y.y1
AND x.x2 = y.y2In inner joins, conditions that do not reference 2 tables are not really join conditions, so it doesn't matter if they are in the FROM clause or in the WHERE clause.
In your case
SM.TRANSDEFID in (999,2329,2344,2370,150000903,150005362)could be part of a join condition involving sm, or it could be in the WHERE clause. Most people find it clearer if 1-table conditions like this are in the WHERE clause.
Again, this only applies to inner joins. For outer joins, all conditions that apply to a table that may lack matching rows must be included in the FROM clause, like this:
LEFT OUTER JOIN fvstock fvs ON sm.propref = fvs.recordid
AND fvs.fieldid = 2559
AND fvs.flevel = 'F'Try it.
If you have trouble, post your best attempt, along with CREATE TABLE and INSERT statements for a little sample data from all the tables involved, and the results you want from that data. Simplify the problem. Post only the tables and columns that you don't know how to handle.
See the forum FAQ {message:id=9360002}
user8428528 wrote:
AND (M.ID = {@MATERIALID@} OR {@MATERIALID@} = 0)
AND (SM.STOREID = {@STOREID@} OR {@STOREID@} = 0)
AND (F.ID = {@SUPPLIERID@} OR {@SUPPLIERID@} = 0)
AND SM.TRANSACTIONDATE BETWEEN {@STARTDATE@} AND {@ENDDATE@}This is not valid Oracle SQL. Is {@MATERIALID@} some kind of variable?
Maybe you are looking for
-
Display is not working But Through Screen Sharing I can Access my computer
Ok. After turning my computer off and then turning it back on a couple hours later the screen would not turn on. Im still able to log in. With screen Sharing I can acces my computer and system profiler shows that my RAM cards are OK. However when I c
-
How can I get a larger output size without dropouts?
Using FMLE 3.2 to push HD to UStream. Capture card is a Decklink Studio2. Codec is h.264. I see blocking and get dropouts on the input side when I increase the output size above 720 x 404. I have used different bit rates, up to 2500. Same proble
-
Creating CSV ETL from ValueObject collection
Hey all, Suprisingly, I can not find a lot of information regarding direct ETL/export from a javabean collection (i.e. a ValueObject collection from EJB) into a CSV for export. Part of the ETL is to map specific javabean properties to the CSV in a pa
-
Hello I have small application. I want the form to be closed automatically if user is idle for more 5 minutes. How i can solve this problem. Please help me Dhanunjaya Rao
-
Deleting the totals in the view
Hi, Is there any way to eliminate the totals in the demand planning view? How could it be done? Thanks a lot