Sub query related information
HI,
Could you pls. tell me the use of the subquery in different clauses; such as;
1. when to use the subquery in the FROM clause ?
2. when to use the subquery in the WHERE clause ?
3. when to use the select statement within the select statement; such as, select last_name, (select employee_id.......) ?
I am aware of that in real life the usage of the subquery depends on the requirements whcih is encountered.
If you have any document (pdf/word doc) / source where the the usage of the subquery is broadly elaborated with example (preferaby based on EMPLOYEES and DEPARTMENTS tables), pls. let me know. It will help me a lot.
Warm regards,
Hi,
Tapash wrote:
HI,
Could you pls. tell me the use of the subquery in different clauses; such as;
1. when to use the subquery in the FROM clause ? That's called an in-line view.
Use it when you want to treat the result set of a query as if it were a table.
In Oracle 9 (and up) you can also us the WITH clause for this purpose.
2. when to use the subquery in the WHERE clause ? There are two specail types of qub-queries, EXISTS- and IN sub-queries, that return boolean values.
Use them when they help you get the results you need.
They're not restricted to WHERE clauses: you can use EXISTS and IN sub-queries in CASE statements in other clauses, too.
3. when to use the select statement within the select statement; such as, select last_name, (select employee_id.......) ? That's called a scalar sub-query.
Use it when you want to treat the result set as if it were a single value.
Scalar sub-queries are not restricted to the SELECT clause: you can use them in other clauses, too.
I am aware of that in real life the usage of the subquery depends on the requirements whcih is encountered. Exactly. All of these are tools. Not all tools are appropriate for all jobs.
Similar Messages
-
Can someone please help me with a sub query question?
I need to list a 3rd party contract and then a list of students who belong to that contract.
On the students segment of the listing I need to show students with student id, name, total credit hours,
total amount spent on tuition, total amount spent on books and total amount spent on misc.
This code has a query for the contract information and I get that just fine.
Then it has a query that gives me total credit hours and that works fine
then it has a query that gives me total amount spent on tuition and that works fine
but
when I add the next query to get total amount spent on books I get only the information for the contract, I don't get student stuff anymore.
I would really appreciate any guidance that you could give.
Thanks in advance, Bob Hohulski
DECLARE
l_conn utl_TCP.connection;
v_filehandle utl_file.file_type;
v_output varchar2(1000);
v_contract_id varchar2(9);
v_contract_addr1 varchar2(30);
v_contract_addr2 varchar2(30);
v_contract_city varchar2(20);
v_contract_stat varchar2(03);
v_contract_zip varchar2(10);
v_contract_name varchar2(60);
v_student_id varchar2(09);
v_student_first_name varchar2(15);
v_student_mid_name varchar2(15);
v_student_last_name varchar2(60);
v_last_out varchar2(20);
v_student_detail_code varchar2(04);
v_student_amount number(12,2);
v_student_ref_number varchar2(09);
v_credit_hrs number(7,2);
v_tuition_amount number(12,2);
v_books_amount number(12,2);
v_misc_amount number(12,2);
v_total_for_student number(12,2);
v_current_student varchar2(09);
v_sftregs_pidm varchar2(09);
v_tbraccd_pidm varchar2(09);
CURSOR c_sel_contract IS
SELECT DISTINCT spriden_id, spriden_last_name,
spraddr_street_line1, spraddr_street_line2,
spraddr_city, spraddr_stat_code, spraddr_zip
FROM spriden, spraddr
-- WHERE spriden_id = '&Enter_Id'
where spriden_id = 'T10474666'
AND spriden_pidm = spraddr_pidm
AND SPRIDEN_CHANGE_IND IS NULL;
CURSOR c_sel_student IS
SELECT DISTINCT spriden_id, spriden_first_name, spriden_mi, spriden_last_name,
sftregs_credit_hr,
tbraccd_amount,
sftregs_pidm,
tbraccd_pidm
FROM spriden, tbraccd, tbbcstu, sftregs
WHERE 559220 = tbbcstu_contract_pidm
AND spriden_pidm = tbraccd_pidm
AND spriden_pidm = tbbcstu_stu_pidm
AND spriden_pidm = sftregs_pidm
AND (sftregs_pidm, sftregs_credit_hr) IN
(SELECT DISTINCT sftregs_pidm, SUM(sftregs_credit_hr)
FROM sftregs, tbbcstu, spriden
WHERE sftregs_term_code = '201010'
AND sftregs_pidm = tbbcstu_stu_pidm
AND sftregs_pidm = spriden_pidm
GROUP BY sftregs_pidm)
AND (tbraccd_pidm, tbraccd_amount) IN
(SELECT DISTINCT tbraccd_pidm, SUM(tbraccd_amount)
-- tuition
FROM tbraccd, tbbcstu, spriden
WHERE tbraccd_term_code = '201010'
AND (tbraccd_detail_code = 'TU01' OR
tbraccd_detail_code = 'TU02' OR
tbraccd_detail_code = 'TU03' OR
tbraccd_detail_code = 'TU04')
AND tbraccd_pidm = tbbcstu_stu_pidm
AND tbraccd_pidm = spriden_pidm
GROUP BY tbraccd_pidm)
--this code works up to this point
--when I add the next query I get nothing
AND (tbraccd_pidm, tbraccd_amount) IN
(SELECT tbraccd_pidm, SUM(tbraccd_amount)
books
FROM tbraccd, tbbcstu
WHERE tbraccd_term_code = '201010'
AND (tbraccd_detail_code = 'BKSU' OR
tbraccd_detail_code = 'BKCH')
AND tbraccd_pidm = tbbcstu_stu_pidm
GROUP BY tbraccd_pidm, tbraccd_amount)
--AND (tbraccd_pidm, tbraccd_amount) IN
-- (SELECT tbraccd_pidm, SUM(tbraccd_amount)
-- misc
-- FROM tbraccd, tbbcstu
-- WHERE tbraccd_term_code = '201010'
-- AND tbraccd_pidm = tbbcstu_stu_pidm
-- AND (tbraccd_detail_code = 'AUNA' OR
-- tbraccd_detail_code = 'OTPB')
-- GROUP BY tbraccd_pidm, tbraccd_amount)
--ORDER BY tbraccd_pidm, spriden_first_name, spriden_mi, spriden_last_name,
-- tbbcstu_sponsor_ref_number, sftregs_credit_hr;
ORDER BY tbraccd_pidm;
BEGIN
v_filehandle := utl_file.fopen(location => 'UTLFILE_MISAP9',
filename => 'ban_matrix.dat',
open_mode => 'w',
max_linesize => 32767);
OPEN c_sel_contract;
LOOP
DBMS_OUTPUT.PUT_LINE('looping');
FETCH c_sel_contract INTO v_contract_id, v_contract_name,
v_contract_addr1, v_contract_addr2,
v_contract_city, v_contract_stat,
v_contract_zip;
EXIT WHEN c_sel_contract%NOTFOUND;
v_output :=
nvl(rpad(v_contract_id,9),rpad(' ',9)) ||
' ' ||
nvl(rpad(v_contract_name,60),rpad(' ',60));
utl_file.put_line(v_filehandle,v_output);
v_output :=
nvl(rpad(v_contract_addr1, 30),rpad(' ',30)) ||
' ' ||
nvl(rpad(v_contract_addr2, 30),rpad(' ',30));
utl_file.put_line(v_filehandle,v_output);
v_output :=
nvl(rpad(v_contract_city, 20), rpad(' ',20)) ||
' ' ||
nvl(rpad(v_contract_stat, 3), rpad(' ',3)) ||
' ' ||
nvl(rpad(v_contract_zip, 10), rpad(' ',10));
utl_file.put_line(v_filehandle,v_output);
utl_file.new_line(v_filehandle);
OPEN c_sel_student;
LOOP
FETCH c_sel_student into v_student_id, v_student_first_name, v_student_mid_name,
v_student_last_name,
v_credit_hrs,
v_tuition_amount,
v_sftregs_pidm,
v_tbraccd_pidm;
-- v_books_amount, v_misc_amount;
EXIT WHEN c_sel_student%NOTFOUND;
v_last_out := substr(v_student_last_name, 1, 20);
v_output :=
nvl(rpad(v_student_id, 09),rpad(' ',09)) ||
' ' ||
nvl(rpad(v_student_first_name, 15),rpad(' ',15)) ||
nvl(rpad(v_student_mid_name, 15),rpad(' ',15)) ||
nvl(rpad(v_last_out, 20),rpad(' ',20)) ||
' ' ||
nvl(rpad(v_student_ref_number, 09),rpad(' ',09)) ||
' ' ||
v_credit_hrs ||
' ' ||
v_tuition_amount ||
-- v_books_amount ||
-- ' ' ||
-- v_misc_amount;
utl_file.put_line(v_filehandle,v_output);
END LOOP;
END LOOP;
--EXCEPTION
--WHEN OTHERS THEN
-- DECLARE
-- err_msg VARCHAR2(100);
-- BEGIN
-- err_msg := 'ERR- '||SUBSTR(SQLERRM, 1,100);
-- - utl_file.put_line(v_filehandle,err_msg);
--END;
utl_file.fclose(v_filehandle);
CLOSE c_sel_contract;
CLOSE c_sel_student;
--END AR_MATRIX_PROC;
END;run this original query
SELECT DISTINCT spriden_id,
spriden_first_name,
spriden_mi,
spriden_last_name,
sftregs_credit_hr,
tbraccd_amount,
sftregs_pidm,
tbraccd_pidm
FROM spriden, tbraccd, tbbcstu, sftregs
WHERE 559220 = tbbcstu_contract_pidm
AND spriden_pidm = tbraccd_pidm
AND spriden_pidm = tbbcstu_stu_pidm
AND spriden_pidm = sftregs_pidm
AND (sftregs_pidm, sftregs_credit_hr) IN (SELECT DISTINCT sftregs_pidm, SUM(sftregs_credit_hr)
FROM sftregs, tbbcstu, spriden
WHERE sftregs_term_code = '201010'
AND sftregs_pidm = tbbcstu_stu_pidm
AND sftregs_pidm = spriden_pidm
GROUP BY sftregs_pidm)
AND (tbraccd_pidm, tbraccd_amount) IN (SELECT DISTINCT tbraccd_pidm, SUM(tbraccd_amount)
-- tuition
FROM tbraccd, tbbcstu, spriden
WHERE tbraccd_term_code = '201010'
AND (tbraccd_detail_code = 'TU01' OR
tbraccd_detail_code = 'TU02' OR
tbraccd_detail_code = 'TU03' OR
tbraccd_detail_code = 'TU04')
AND tbraccd_pidm = tbbcstu_stu_pidm
AND tbraccd_pidm = spriden_pidm
GROUP BY tbraccd_pidm)
AND (tbraccd_pidm, tbraccd_amount) IN (SELECT tbraccd_pidm, SUM(tbraccd_amount) books
FROM tbraccd, tbbcstu
WHERE tbraccd_term_code = '201010'
AND (tbraccd_detail_code = 'BKSU' OR
tbraccd_detail_code = 'BKCH')
AND tbraccd_pidm = tbbcstu_stu_pidm
GROUP BY tbraccd_pidm, tbraccd_amount)
ORDER BY tbraccd_pidm;then run this sub-query:
SELECT tbraccd_pidm, SUM(tbraccd_amount) books
FROM tbraccd, tbbcstu
WHERE tbraccd_term_code = '201010'
AND (tbraccd_detail_code = 'BKSU' OR
tbraccd_detail_code = 'BKCH')
AND tbraccd_pidm = tbbcstu_stu_pidm
GROUP BY tbraccd_pidm, tbraccd_amount)see if you have a matching tbraccd_pidm and tbraccd_amount between the two results. -
Query related to multiple attachments in mail adapter
Hi,
I have a query related to multiple attachments in receiver mail adapter.
I have successfully configured mail related scenarios but now I have another requirement in which I have multiple source files in one directory and I want to send one mail for multiple files as mail attachment using receiver mail adapter. Can anybody help me how to achieve multiple attachments in reciever mail adapter.
To clarify the requirement more let us take an example
Ex: I have 5 input files in the source which I pick up using additional files option in the sender file adapter, now I want to send those 5 files into one mail with 5 attachments. Can anybody explain how 5 different payload will be sent as multiple attachments in one mail.
For your information I used, options like "keep attachments" , some parameters in module processesors etcs...but not able to find out as how exactly it will be achieved.......I dont want to use BPM collect pattern for this.....
Need your help on this issue. Please suggest the solution as how it can be achieved using receiver mail adapter.
Thanks & Regards
PrabhatHi,
I resolved the issue on my own. Thanks for your help and support.
Thanks & Regards
Prabhat -
Hello All,
We are in process of implementing Exchange 2013 in our Organization and had a Query related to GAL.
Below is our Environment description:
01. We have a Single Forest and Single Domain Architecture.
02. We will have separate Active Directory Sites for all 3 Regions across Global.
03. Exchange 2013 will be installed in each region.
04. In APAC region Exchange 2013 Language pack for Japanese will be installed to support Japanese language.
Our Requirement:
================
01. When a Japanese User tries to browse GAL all the display names have to be displayed in Japanese language and when a user who resides other Region (Europe or AMERICAS) tries to browse GAL the Address list has to be displayed in default English Language.
Can someone guide us on how this can be achieved?
Awaiting for all your suggestions.
Thanks in advance.
Thanks & Regards,
Nagaraj N
Nagaraj NHi Nagaraj,
Here are some requirements that I am still not quite sure. Could you please provide more information about it? Such as:
1. Do you mean one user have two display names: one with Japanese language used for users in Japan, one with English language used for English users? Then we filter address lists with language difference. Based on my knowledge, one email address is generally
involved for one display name.
2. If there are both Japanese users and English Language users in the forest, and you just need Japanese users view users whose name is displayed as Japanese language. We can use
Address book policies (ABPs) to segment users into specific groups to provide customized views of your organization’s global address list (GAL).
To show different GAL for different users, we can specify the CustomAttribute1-15 property to divide your organizations. For example, we can set the CustomAttribute15 property for Japanese users to
Japan. Just like:
Set-Mailbox –Identity JapanUser1 –CustomAttribute15 Japan
Then we can create global address list for Japanese that includes all of the recipients that exists in the address lists and room address list:
New-GlobalAddressList -Name "GAL_Japan" -RecipientFilter {(CustomAttribute15 -eq "Japan")}
For detailed steps about how to create and apply the Address Book Policies, please refer to:
http://technet.microsoft.com/en-us/library/jj657455(v=exchg.150).aspx
Hope it helps.
Regards,
Winnie Liang
TechNet Community Support -
Query related to UPN Suffix in Hierarchical domain architecture in Active Directory deployment
This is regarding a query related to UPN Suffix in Hierarchical domain architecture in Active Directory deployment.
We use LDAP query (filter uPNSuffixes=* for the parent domain DN) to retrieve the upn suffixes configured in the AD Domain. This returns the UpnSuffixes configured for the entire domain tree ( upnsuffixes of parent domain and all the child domains) in the
hierarchy. The AD Domains and Trusts configuration lists all the upnsuffixes as part of the dnsroot domain.
For one of our implementation, we need to distinguish between the UPNsuffixes belonging to the parent and child domain and map the UPN suffixes with the respective domain in the hierarchy. As the upnsuffixes are stored as part of the root domain in the AD
domains and trusts configuration, it was not clear how to retrieve the information specific to each domain in the hierarchy.
It would be helpful if you could provide pointers on how to obtain the above mapping for the upn suffixes in a hierarchical domain setup.
Thank you,
DurgeshBy default, you can use only the domain name as UPN suffix for user accounts you create within the domain. It is possible to add extra UPN suffixes but these are added at the forest level and not specific to a domain.
This posting is provided AS IS with no warranties or guarantees , and confers no rights.
Ahmed MALEK
My Website Link
My Linkedin Profile
My MVP Profile -
SELECT records larger than date specified in sub query
Dear All
Thank you for your attention.
I would like to select records larger than date specified in sub query
query should be something like the following
SELECT my_order_number, my_date, my_task
FROM MYTB
WHERE my_order_number IN order_no AND my_date > date (SELECT order_no, date FROM MySubQueryResult)
(it is incorrect)
Sub query result:
order_no | date
A1 | 2014-12-21 09:06:00
A2 | 2014-12-20 09:07:00
A3 | 2014-12-20 08:53:00
A4 | 2014-12-20 08:57:00
MYTB:
my_order_number | my_task | my_date
A1 | T1 | 2014-12-21 09:06:00
A1 | T2 | 2014-12-22 10:01:00
A2 | T1 | 2014-12-20 09:07:00
A3 | T2 | 2014-12-20 08:53:00
A3 | T4 | 2014-12-21 09:30:00
A3 | T8 | 2014-12-23 20:32:00
A4 | T6 | 2014-12-20 08:57:00
expected result:
my_order_number | my_task | my_date
A1 | T2 | 2014-12-22 10:01:00
A3 | T4 | 2014-12-21 09:30:00
A3 | T8 | 2014-12-23 20:32:00
Any ideas? Thanks.
swivanHi,
try this
SELECT my_order_number, my_date, my_task
FROM MYTB
WHERE my_order_number IN (SELECT order_no FROM MySubQueryResult)
AND my_date > (SELECT date FROM MySubQueryResult)
Alternatively, you can also make use of joins to achieve the same.
Please mark solved if I've answered your question, vote for it as helpful to help other users find a solution quicker
Praveen Dsa | MCITP - Database Administrator 2008 |
My Blog | My Page
Dear Praveen Dsa
Thanks for your reply, but order_no and date are paired and related, cannot separate.
each order have its own date, so it is not working
Best Regards
swivan -
Hi All,
I have a query..I have a table employee ..I also have an another table manager
I have two tables. employee and manager tables.
employee columns: emp_key, emp_name,parent_emp_id , level_no
manager columns: man_key,man_name,man_id
I should check the manager key equals emp key . if found i shud check whether emp key has parent emp key, if found i shud take emp name of that row and update in manager name in manager table.
I tried co related sub query but it works only in select statement but not update. can any one help me on this .Also can any one tell me whether we can use CONNECT BY PRIOR statement. any one tell me whether we can use CONNECT BY PRIOR statement.Hi,
Sorry, I still don't uderstand the problem well enough to help.
The INSERT statements look okay now. What did you do to make them appear? (It would be good to know, when other people have the same problem.)
Can you do something similar to make the CREATE TABLE statements appear?
You have 4 rows in one table and 1 row in another table. You want to write an UPDATE statement (or something) that changes them. Is that right?
What should be in the changed tble after that UPDATE statement? Use a text editor to show what "SELECT * FROM ..." should produce. Post it on this site, but type these 6 characters:
\(small letters only, inside curly brackets) before and after each the section of formatted text, to preserve spacing.
MERGE is often eaiser than UPDATE, especially if the UPDATE statement would need a complicated WHERE clause.
It might help to see the UPDATE statement you tried, even though it doesn't work. -
Calculation based on sub query
Is it possible to base a calculation on a sub query whereby both the calculation sheet and sub query sheet reside on same discoverer workbook?
This is possible in MS Excel whereby information from one tab can be used in another tab. I am using Discoverer 3.1.44Hi
I'm afraid that Discoverer's use of sub queries is restricted to only using a sub query as a means of further controlling the data that is pulled back.
It is not possible to use data from a sub query in a calculation, only in a condition. It also makes no difference which version of Discoverer you have because this mode of operation remains the same no matter what version you have (even 10g!!)
Hope this helps
Regards
Michael -
Handling address related information for different countries
Hi,
We are trying to understand the best way to display / query address related information (while designing internationalization for our application) - from users based on their locale - for example we would need to ask zip code - if the user is in US, in UK it would be postal code , there would be counties in UK but not in India etc . Is there some guideline / frame work for designing address related forms for international applications?
Thanks in Advance for your help !!The problem is that you need different pieces of information for different countries, and they need to be in a different order. Some information is required for some countries, some information does not exist for some countries, and the content for certain pieces of information is different for some countries.
If you are not going to do any kind of verification of the information (zip code, for instance), and also not check whether the field is filled in at all, then it doesn't matter if you have separate fields.
There are 3 choices:
1. Implement correct addresses for every single country in the world
2. Implement correct addresses for a few select countries, and then state clearly that you only support those countries
3. Treat an address as a single piece of information
Good luck with #1. -
Can i use Sub Query Factoring Here ?
Hi;
SQL>SELECT * FROM V$VERSION;
BANNER
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
CORE 11.1.0.7.0 Production
TNS for Linux: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - ProductionSQL
select /*+ PARALLEL(det, 4) */ '12062' snapshot_id,det.journal_entry_line_id, det.accounting_date,det.company_code,det.account_number,
det.transaction_id, det.transaction_id_type, det.amount,det.currency_code,det.debit_or_credit,det.category,det.subcategory,det.reference1,det.reference1_type,
det.reference2,det.reference2_type,det.gl_batch_id,det.marketplace_id,det.cost_center,det.gl_product_line,det.location,det.project,det.sales_channel,
det.created_by,det.creation_date,det.last_updated_by,det.last_updated_date,agg.age,last_day(to_date('04/21/2010','MM/DD/YYYY')) snapshot_day
from
select company_code, account_number, transaction_id,
decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type) transaction_id_type,
(last_day(to_date('04/21/2010','MM/DD/YYYY')) - min(z.accounting_date) ) age,sum(z.amount)
from
select /*+ PARALLEL(use, 2) */ company_code,substr(account_number, 1, 5) account_number,transaction_id,
decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type) transaction_id_type,use.amount,use.accounting_date
from financials.unbalanced_subledger_entries use
where use.accounting_date >= to_date('04/21/2010','MM/DD/YYYY')
and use.accounting_date < to_date('04/21/2010','MM/DD/YYYY') + 1
UNION ALL
select /*+ PARALLEL(se, 2) */ company_code, substr(se.account_number, 1, 5) account_number,transaction_id,
decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type) transaction_id_type,se.amount,se.accounting_date
from financials.temp2_sl_snapshot_entries se,financials.account_numbers an
where se.account_number = an.account_number
and an.subledger_type in ('C', 'AC')
) z
group by company_code,account_number,transaction_id,decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type)
having abs(sum(z.amount)) >= 0.01
) agg,
select /*+ PARALLEL(det, 2) */ det.journal_entry_line_id, det.accounting_date, det.company_code, det.account_number, det.transaction_id, decode(det.transaction_id_type, 'CollectionID', 'SettlementGroupID', det.transaction_id_type) transaction_id_type,
det.amount, det.currency_code, det.debit_or_credit, det.category, det.subcategory, det.reference1, det.reference1_type, det.reference2, det.reference2_type,
det.gl_batch_id, det.marketplace_id, det.cost_center, det.gl_product_line, det.location, det.project, det.sales_channel, det.created_by, det.creation_date,
det.last_updated_by, det.last_updated_date
from financials.unbalanced_subledger_entries det
where accounting_date >= to_date('04/21/2010','MM/DD/YYYY')
and accounting_date < to_date('04/21/2010','MM/DD/YYYY') + 1
UNION ALL
select /*+ PARALLEL(det, 2) */ det.journal_entry_line_id, det.accounting_date, det.company_code, det.account_number, det.transaction_id,
decode(det.transaction_id_type, 'CollectionID', 'SettlementGroupID', det.transaction_id_type) transaction_id_type, det.amount, det.currency_code,
det.debit_or_credit, det.category, det.subcategory, det.reference1, det.reference1_type, det.reference2, det.reference2_type, det.gl_batch_id, det.marketplace_id,
det.cost_center, det.gl_product_line, det.location, det.project, det.sales_channel, det.created_by, det.creation_date, det.last_updated_by, det.last_updated_date
from financials.temp2_sl_snapshot_entries det,financials.account_numbers an
where det.account_number = an.account_number
and an.subledger_type in ('C', 'AC')
) det
where agg.company_code = det.company_code
and agg.account_number = substr(det.account_number, 1, 5)
and agg.transaction_id = det.transaction_id
and agg.transaction_id_type = det.transaction_id_type
/Execution Plan
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 12M| 8012M| | 541K (1)| 01:48:21 | | | |
| 1 | PX COORDINATOR | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10005 | 12M| 8012M| | 541K (1)| 01:48:21 | Q1,05 | P->S | QC (RAND) |
|* 3 | HASH JOIN BUFFERED | | 12M| 8012M| 1098M| 541K (1)| 01:48:21 | Q1,05 | PCWP | |
| 4 | PX RECEIVE | | 35M| 3992M| | 166K (2)| 00:33:16 | Q1,05 | PCWP | |
| 5 | PX SEND HASH | :TQ10003 | 35M| 3992M| | 166K (2)| 00:33:16 | Q1,03 | P->P | HASH |
| 6 | VIEW | | 35M| 3992M| | 166K (2)| 00:33:16 | Q1,03 | PCWP | |
|* 7 | FILTER | | | | | | | Q1,03 | PCWC | |
| 8 | HASH GROUP BY | | 35M| 4528M| | 166K (2)| 00:33:16 | Q1,03 | PCWP | |
| 9 | PX RECEIVE | | 35M| 4528M| | 166K (2)| 00:33:16 | Q1,03 | PCWP | |
| 10 | PX SEND HASH | :TQ10001 | 35M| 4528M| | 166K (2)| 00:33:16 | Q1,01 | P->P | HASH |
| 11 | HASH GROUP BY | | 35M| 4528M| | 166K (2)| 00:33:16 | Q1,01 | PCWP | |
| 12 | VIEW | | 35M| 4528M| | 164K (1)| 00:33:00 | Q1,01 | PCWP | |
| 13 | UNION-ALL | | | | | | | Q1,01 | PCWP | |
| 14 | PX BLOCK ITERATOR | | 11 | 539 | | 1845 (1)| 00:00:23 | Q1,01 | PCWC | |
|* 15 | TABLE ACCESS FULL | UNBALANCED_SUBLEDGER_ENTRIES | 11 | 539 | | 1845 (1)| 00:00:23 | Q1,01 | PCWP | |
|* 16 | HASH JOIN | | 35M| 2012M| | 163K (1)| 00:32:37 | Q1,01 | PCWP | |
| 17 | BUFFER SORT | | | | | | | Q1,01 | PCWC | |
| 18 | PX RECEIVE | | 21 | 210 | | 2 (0)| 00:00:01 | Q1,01 | PCWP | |
| 19 | PX SEND BROADCAST | :TQ10000 | 21 | 210 | | 2 (0)| 00:00:01 | | S->P | BROADCAST |
|* 20 | TABLE ACCESS FULL| ACCOUNT_NUMBERS | 21 | 210 | | 2 (0)| 00:00:01 | | | |
| 21 | PX BLOCK ITERATOR | | 56M| 2701M| | 162K (1)| 00:32:35 | Q1,01 | PCWC | |
| 22 | TABLE ACCESS FULL | TEMP2_SL_SNAPSHOT_ENTRIES | 56M| 2701M| | 162K (1)| 00:32:35 | Q1,01 | PCWP | |
| 23 | PX RECEIVE | | 35M| 18G| | 82859 (1)| 00:16:35 | Q1,05 | PCWP | |
| 24 | PX SEND HASH | :TQ10004 | 35M| 18G| | 82859 (1)| 00:16:35 | Q1,04 | P->P | HASH |
| 25 | BUFFER SORT | | 12M| 8012M| | | | Q1,04 | PCWP | |
| 26 | VIEW | | 35M| 18G| | 82859 (1)| 00:16:35 | Q1,04 | PCWP | |
| 27 | UNION-ALL | | | | | | | Q1,04 | PCWP | |
| 28 | PX BLOCK ITERATOR | | 11 | 2255 | | 923 (1)| 00:00:12 | Q1,04 | PCWC | |
|* 29 | TABLE ACCESS FULL | UNBALANCED_SUBLEDGER_ENTRIES | 11 | 2255 | | 923 (1)| 00:00:12 | Q1,04 | PCWP | |
|* 30 | HASH JOIN | | 35M| 7514M| | 81936 (1)| 00:16:24 | Q1,04 | PCWP | |
| 31 | PX RECEIVE | | 21 | 210 | | 2 (0)| 00:00:01 | Q1,04 | PCWP | |
| 32 | PX SEND BROADCAST | :TQ10002 | 21 | 210 | | 2 (0)| 00:00:01 | Q1,02 | P->P | BROADCAST |
| 33 | PX BLOCK ITERATOR | | 21 | 210 | | 2 (0)| 00:00:01 | Q1,02 | PCWC | |
|* 34 | TABLE ACCESS FULL | ACCOUNT_NUMBERS | 21 | 210 | | 2 (0)| 00:00:01 | Q1,02 | PCWP | |
| 35 | PX BLOCK ITERATOR | | 56M| 11G| | 81840 (1)| 00:16:23 | Q1,04 | PCWC | |
| 36 | TABLE ACCESS FULL | TEMP2_SL_SNAPSHOT_ENTRIES | 56M| 11G| | 81840 (1)| 00:16:23 | Q1,04 | PCWP | |
Predicate Information (identified by operation id):
3 - access("AGG"."COMPANY_CODE"="DET"."COMPANY_CODE" AND "AGG"."ACCOUNT_NUMBER"=SUBSTR("DET"."ACCOUNT_NUMBER",1,5) AND
"AGG"."TRANSACTION_ID"="DET"."TRANSACTION_ID" AND "AGG"."TRANSACTION_ID_TYPE"="DET"."TRANSACTION_ID_TYPE")
7 - filter(ABS(SUM(SYS_OP_CSR(SYS_OP_MSR(SUM("Z"."AMOUNT"),MIN("Z"."ACCOUNTING_DATE")),0)))>=0.01)
15 - filter("USE"."ACCOUNTING_DATE"<TO_DATE(' 2010-04-22 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "USE"."ACCOUNTING_DATE">=TO_DATE('
2010-04-21 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
16 - access("SE"."ACCOUNT_NUMBER"="AN"."ACCOUNT_NUMBER")
20 - filter("AN"."SUBLEDGER_TYPE"='AC' OR "AN"."SUBLEDGER_TYPE"='C')
29 - filter("ACCOUNTING_DATE"<TO_DATE(' 2010-04-22 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "ACCOUNTING_DATE">=TO_DATE(' 2010-04-21
00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
30 - access("DET"."ACCOUNT_NUMBER"="AN"."ACCOUNT_NUMBER")
34 - filter("AN"."SUBLEDGER_TYPE"='AC' OR "AN"."SUBLEDGER_TYPE"='C')
This query is failing due to TEMP issue (TEMP SPACE out of space)
My TEMP tablespace is 70GB and no one is using TEMP space while this query is in execution.
PGA=16 GB.
What i can see from execution plan is : Two large resultsets AGG (13Million) and DET (135 Million) is being joined HASH JOIN BUFFERED. Which is getting spilled to TEMP space causing TEMP outage.
Is there any way, i can re-write this query (probably using SUB QUERY FACTORING...WITH CLAUSE) so that reduce two times access to TEMP2_SL_SNAPSHOT_ENTRIES table. TEMP2_SL_SNAPSHOT_ENTRIES is 12 GB non partition table and i cannot use any other filter to restrict rows from this table.Adding more information here :
Inner sub query (Which forms DET-bottom)
select /*+ PARALLEL(det, 2) */ det.journal_entry_line_id, det.accounting_date, det.company_code, det.account_number, det.transaction_id,
decode(det.transaction_id_type, 'CollectionID', 'SettlementGroupID', det.transaction_id_type) transaction_id_type, det.amount, det.currency_code,
det.debit_or_credit, det.category, det.subcategory, det.reference1, det.reference1_type, det.reference2, det.reference2_type, det.gl_batch_id, det.marketplace_id,
det.cost_center, det.gl_product_line, det.location, det.project, det.sales_channel, det.created_by, det.creation_date, det.last_updated_by, det.last_updated_date
from financials.temp2_sl_snapshot_entries det,financials.account_numbers an
where det.account_number = an.account_number
and an.subledger_type in ('C', 'AC');
Plan hash value: 976020246
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 35M| 7514M| 163K (1)| 00:32:47 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 35M| 7514M| 163K (1)| 00:32:47 | Q1,01 | P->S | QC (RAND) |
|* 3 | HASH JOIN | | 35M| 7514M| 163K (1)| 00:32:47 | Q1,01 | PCWP | |
| 4 | BUFFER SORT | | | | | | Q1,01 | PCWC | |
| 5 | PX RECEIVE | | 21 | 210 | 2 (0)| 00:00:01 | Q1,01 | PCWP | |
| 6 | PX SEND BROADCAST | :TQ10000 | 21 | 210 | 2 (0)| 00:00:01 | | S->P | BROADCAST |
|* 7 | TABLE ACCESS FULL| ACCOUNT_NUMBERS | 21 | 210 | 2 (0)| 00:00:01 | | | |
| 8 | PX BLOCK ITERATOR | | 56M| 11G| 163K (1)| 00:32:45 | Q1,01 | PCWC | |
| 9 | TABLE ACCESS FULL | TEMP2_SL_SNAPSHOT_ENTRIES | 56M| 11G| 163K (1)| 00:32:45 | Q1,01 | PCWP | |
Predicate Information (identified by operation id):
3 - access("DET"."ACCOUNT_NUMBER"="AN"."ACCOUNT_NUMBER")
7 - filter("AN"."SUBLEDGER_TYPE"='AC' OR "AN"."SUBLEDGER_TYPE"='C')
Statistics
31 recursive calls
3 db block gets
1634444 consistent gets
1625596 physical reads
636 redo size
1803659818 bytes sent via SQL*Net to client
125054 bytes received via SQL*Net from client
11331 SQL*Net roundtrips to/from client
3 sorts (memory)
0 sorts (disk)
56645822 rows processedOther sub query (that forms AGG)
select /*+ PARALLEL(se, 2) */ company_code, substr(se.account_number, 1, 5) account_number,transaction_id,
decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type) transaction_id_type,se.amount,se.accounting_date
from financials.temp2_sl_snapshot_entries se,financials.account_numbers an
where se.account_number = an.account_number
and an.subledger_type in ('C', 'AC');
Plan hash value: 976020246
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 35M| 2012M| 163K (1)| 00:32:37 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 35M| 2012M| 163K (1)| 00:32:37 | Q1,01 | P->S | QC (RAND) |
|* 3 | HASH JOIN | | 35M| 2012M| 163K (1)| 00:32:37 | Q1,01 | PCWP | |
| 4 | BUFFER SORT | | | | | | Q1,01 | PCWC | |
| 5 | PX RECEIVE | | 21 | 210 | 2 (0)| 00:00:01 | Q1,01 | PCWP | |
| 6 | PX SEND BROADCAST | :TQ10000 | 21 | 210 | 2 (0)| 00:00:01 | | S->P | BROADCAST |
|* 7 | TABLE ACCESS FULL| ACCOUNT_NUMBERS | 21 | 210 | 2 (0)| 00:00:01 | | | |
| 8 | PX BLOCK ITERATOR | | 56M| 2701M| 162K (1)| 00:32:35 | Q1,01 | PCWC | |
| 9 | TABLE ACCESS FULL | TEMP2_SL_SNAPSHOT_ENTRIES | 56M| 2701M| 162K (1)| 00:32:35 | Q1,01 | PCWP | |
Predicate Information (identified by operation id):
3 - access("SE"."ACCOUNT_NUMBER"="AN"."ACCOUNT_NUMBER")
7 - filter("AN"."SUBLEDGER_TYPE"='AC' OR "AN"."SUBLEDGER_TYPE"='C')
Statistics
31 recursive calls
3 db block gets
1634444 consistent gets
1625596 physical reads
592 redo size
1803659818 bytes sent via SQL*Net to client
125054 bytes received via SQL*Net from client
11331 SQL*Net roundtrips to/from client
3 sorts (memory)
0 sorts (disk)
56645822 rows processed -
Sub Query or Use Result of Query on OLAP BW Universe ?
Dear All,
Could you use in Webi report :
1 ) Sub Query ? I activate the option with Designer but button is still in grey...
2 ) Result of query on filter panel ? The button is still in grey
Regards
CédricHi ,
I do it before my initial post... without success.
I already use Sub Query in relational database, but with OLAP BW universe, I can't use actually...
I am searching info, solution,...
Thanks
Cédric -
Query Jump with Navigation ( Sub query need to show same Navigation )
Hi All.
We have 4 BEx queries in our Dashboard Web Template and each table web items shows 10 rows and remaining with Scorll.
For Printing ,we have created a query jump for each BEx Query ( same copy query) that shows all the rows detail.
When i tried to jump from Orginial Dashboard ( From Specific table/Bex Query) with drill down <b>( Plant by Material )</b> , the jump query is not showing the same drill down but it showing the default rows <b>( Plant as per query rows</b>).
SAP has suggested us its possible to do Query Jump with Navgiation that shows the same drill down path (navigation) in Sub Query as well.
Am unable to find how to configure that , did search in OSS / Other Forumns But there were no postings on this.
For me there is no Settings in RSBBS (or) SPRO and tried the Web Address Jump as well to pass the Drill Down Status (or) Navigation. May be iam not looking at right place. We are at 3.1x
We found some limitations with SAP recommended web printing ( we dont need to discuss about that as per our requirement ), and our users like the Query Jump printing as which we working on now.
Please inform if this can be possible, if so how.
Thanks
Martin MouliThanks for reply Bhanu.
Its not like just Plant by Material.
I would like to do my slicing & dicing on Navigational block with any combinations ( Customer by Plant by Material )
When i do query jump from My Original Web Table , my jump query need to show the same drill down ( Customer by Plant by Material)but its showing only Material. ( Which is a default row in sub query)
To show the same navigation in jump query as well, right now am doing drill down again in jump query as well. Its time waste to repeat the same drill down steps in sub query.
By default my Jump Query has Material as row and We will show Plant & Customer on Demand (free characteristics)
Please inform if more information required.
Regards
Martin Mouli -
Outter-Join with requirement for sub-query
I am working on a view that needs to return 1 record per payment date within the primary payment table.
Part of the information that is to be returned in this row comes from a date-controlled table containing superannuation information. This data may or may not be present, requiring an outer-join. The final problem is that there may be multiple rows in this superannuation table requiring me to retrieve the record with the most recent start date, prior to the payment date. This is where I'm breaking down currently as I cannot outer-join to a sub-query.
I had an idea that I could create an inline view of the superannuation table with 1 row for each of the last 365 days (The reports that will be built off the view are always run within 1-2 months of the payment date), with the date and either the required information or blanks if it did not exist. This would avoid me requiring an outer-join as I could just join on the payment date to the date in the inline query and return whatever data was there.
I'm pretty sure I should be able to do this with analytics rather than creating a date table, by restricting the rows to 365, then havign a column that is effectively the previous column - 1. Unfortunately I'm fairly new to analytics and find the Oracle documentation hard to decipher.
Can anyone help with this or perhaps suggest an alternate solution?please don't do that. that's the most pathetic way generate rows. all_objects is a very nasty view, and oracle reserves the right to merge the view into the rest of your query, making performance less than you had hoped for. how about this instead:
select ...
from (
select trunc(sysdate-rownum+1) super_date
from dual
connect by level < = 365 ) dates,
your_table_here
where dates.super_date = your_column (+)
... -
Hello, I am attempting to create a sub query to display certain information. On the form that the information is inputted, the user has the option of inputting a phone number extension if applicable. If this is the case I want the phone number to show as 555-867-5309 (x1234). However without the problem checks, the (x ) will show up regardless and looks sloppy. Here is the code I have, please advise.
There will be two spots this will be needed -- for the requester's contact number and the app manager (sme) contact information.
Thanks.
select
pm.pk_proj_master_id "Project Number",
pm.trackit_work_order "TrackIt Work Order",
pm.name "Project Name",
pm.status "Project Status",
req.last_name||', '||req.first_name||', '||req.middle_initial||'.' "Requestor Name",
rde.department_group_descr "Requestor Department Name",
req.department_descr "Requestor Division Name",
pm.requester_ext,
case
when pm.requester_ext in
select
pm.requester_phone|| '(x'||pm.requester_ext ||')' "Requesters Number"
from
protrac_master pm
where
pm.requester_ext is not null
else
select
pm.requester_phone "Requesters Number"
from
protrac_master pm
end as "Requester Number",
man.last_name||', '||man.first_name||', '||man.middle_initial||'.' "SME Name",
mdg.department_group_descr "SME Department Name",
man.department_descr "SME Division Name",
pm.app_manager_ext,
case
when pm.app_manager_ext in
select
pm.app_manager_phone|| '(x'||pm.app_manager_ext ||')' "SME Number"
from
protrac_master pm
where
pm.app_manager_phone is not null
else
select
pm.app_manager_phone "SME Number"
from
protrac_master pm
end as "Requester Number",
pm.createby_date "Date Entered",
pm.date_begin "Date Began",
pm.date_completed "Date Completed",
pm.estimated_date "Estimated Completion Date"
from
protrac_master pm,
cobr.vw_pps_payroll req, cobr.department_group rde,
cobr.vw_pps_payroll man, cobr.department_group mdg
where
pm.requester_id = req.emple_no and
pm.requester_dept_id = rde.pk_department_group_id and
pm.app_manager_id = man.emple_no and
pm.app_manager_dept_id = mdg.pk_department_group_id
order by
pm.pk_proj_master_idI think you can avoid the whole sub query thing just by using the NVL2 function:
select ...
, NVL2( pm.requester_ext
, pm.requester_phone|| '(x'||pm.requester_ext ||')'
, pm.requester_phone) "Requesters Number"
, NVL2( pm.app_manager_ext
, pm.app_manager_phone|| '(x'||pm.app_manager_ext ||')'
, pm.app_manager_phone) "Manager Number"
from protrac_master pm
, ... -
How to get all rows that are returned in inner sub query of select statemen
If a sub query in select statement returns more than one row than how to get all those returned rows in the final
output of the query .It will be all right if all column's value repeat and that multiple output of inner query comes
in another column .
How to get that ?As Frank said, you likely want a join, and likely an outer join to replicate the select in the projection. Something like:
SELECT id,stat, section, USER_ID concerned_person
FROM table_all,
left join table2
on room_id = sectoion and
sur_role = 'r001'
WHERE section IN (SELECT code
FROM t_area
WHERE dept= 'p002')An alternative, depending on where and how you are using the statement would be something like:
SQL> WITH t AS (
2 select 1 id from dual union all
3 select 2 id from dual),
4 t1 as (
5 select 1 id, 'One' descr from dual union all
6 select 1, 'Un' from dual union all
7 select 1, 'Une' from dual)
8 SELECT t.id, CURSOR(SELECT t1.id, t1.descr from t1
9 WHERE t1.id = t.id)
10 FROM t;
ID CURSOR(SELECTT1.ID,T
1 CURSOR STATEMENT : 2
CURSOR STATEMENT : 2
ID DESCR
1 One
1 Un
1 Une
2 CURSOR STATEMENT : 2
CURSOR STATEMENT : 2
no rows selectedJohn
Maybe you are looking for
-
24" iMac 2.8GHz and Final Cut Pro?
Does anyone use the new iMac with the latest version of FCP? I was wondering if it was fast enough to work with FCP and Motion 3? Tanks! Mark
-
Issue with Serial number inheritance in PP order
Hi gurus, We have an issue with inheritaning component material serial no. to header material. For production order having different header material and component material,on GI, the serial no. assigned to component is inheritated to header material.
-
Hard drive is missing. I can boot from the cd but when running the disk utility, no hard drive shows up. This is a problem that suddenly appeared.
-
Emac monitor goes black – slap brings it back to life
Last couple of days my emac monitor will just shut down and go black, just like an old TV tube packing up used to. It won't return on restart, but did return a couple of times after I took out mains lead from side of computer, let it rest, then tried
-
Where did you put my bookmarks - I used to have a button for them
I used to have a little bookmark button on the top of the page and now it's gone. I have work to do and don't have time to figure out all the new stuff right now. How do I get my nice, organized button back?