Complex Query Question
I am doing a 9-1-1 reporting system. I am selecting calls by
Agency and type of call for a given month. That works fine, but I
need them printed in desending sequence by number call far a call
type. Don't see anyway to accomplish that with one query.
Is that a way? If not, the second part of this question is
that I have not created a table using SQL. I need 3 fields, Field_A
is Text (9 positions); Field_B is Text (40 Positions) and the last
is my summarized count from the query. How do I create a Table to
support this function?
Query
<cfquery name="GetEventCount"
datasource="JasperCountyDB">
select count(AG_ID) as EventCount, TYCOD, TYP_ENG, CURENT
from aeven
where ((AG_ID = '#Session.InquiryAgencyCode#')
AND (CURENT = 'T') AND (CDTS LIKE '#EventReportDate#'))
group by AG_ID, TYCOD, TYP_ENG, CURENT
</cfquery>
Thanks for any guideance that you can provide.
Ron
Your question wasn't very clear, but if you only want to sort
them by the count in descending order, just ORDER BY 1 DESC.
<cfquery name="GetEventCount"
datasource="JasperCountyDB">
SELECT COUNT(AG_ID) as EventCount, TYCOD, TYP_ENG, CURENT
FROM aeven
WHERE AG_ID = '#Session.InquiryAgencyCode#'
AND CURENT = 'T'
AND CDTS LIKE '#EventReportDate#'
GROUP BY AG_ID, TYCOD, TYP_ENG, CURENT
ORDER BY 1 DESC
</cfquery>
Phil
Similar Messages
-
Complex Query Question(s)
I have two tables; one where I am defining questions and
possible answers and another where you insert the answers. The
table of questions is called 'public_survey', and SURVEY_ID is the
primary key.
The table of answers is called 'public_surveydata', where
SURVEYDATA_ID is the primary key, SURVEYDATA_QUESTIONID is what
links the primary key to public_survey and SURVEYDATA_CONTENTID is
what is needed for output; the other columns are the answers.
I need to:
(a) output public_survey so it displays in a searchable
manner;
(b) using variables from the search I need to search
public_surveydata and pull SURVEYDATA_CONTENTID.
Now comes the part I cannot figure out; I search and I can
pull up all the contentids that are related to each question; but I
cannot figure out to only pull results that are shared over all
returns. My query is a mess; somehow I need to either combine the
query or run another query after the fact that only pulls common
ids.
How do I output only common contentid that are shared in all
the queries?
To see all the code and cfdumps in regards to this post go to
this page:
http://208.106.208.43/data/query.cfm
To see the page in action sans cfdump and code go to this
page:
http://208.106.208.43/data/
Thanks!Thanks Phil; I'm beginning to think I need to redesign it as
well. Basically my reasoning for the tables was that I wanted a
table where I could dynamically add questions that would display a
y/n, dropdown or checkbox answer - this in turn is linked to
another table (posts) by the contentid (see
http://208.106.208.43/data/query.cfm
The idea is to have a dynamic database feature that I could
change on the fly; for example -- if another question is to be
added to the post (i.e. Region) then I can quickly add it to all
data using a query without having to actually touch the database.
This is the form that creates these questions:
http://208.106.208.43/data/survey.cfm
However... that said - I know the easiest way to fix it would
be to just pull these columns out and stick them in the content
table; however that doesn't allow me to set up a dynamic table
where I can quickly change the questions.
How would you write a dynamic databases where you can quickly
insert fields and link them to other tables? -
Complex Query Question-ADF/JSP/10g
I have a query in a VO that I'm programmatically creating the where clause for that has been working fine.
I need to extend the functionality to include other tables. I had thought that adding a union to my programmatically generated SQL would work, but it fails at execution. Apparently the environment adds a "select count(1) from(" to the front of my query to generate a row output count, and then closes the parenthesis in the wrong place, which causes the query to fail with an "ORA-00933 SQL command not properly ended".
How can I accomplish this? I've looked at creating a new VO which includes multiple tables, but what I really need is a union of output from the single primary table with multiple from and where that are dynamically generated based upon user input.Here is the logging output when it throws the exception:
04/08/05 09:16:14 [497] Reusing a cached session application module instance
04/08/05 09:16:14 [498] Getting a connection for internal use...
04/08/05 09:16:14 [499] Creating internal connection...
04/08/05 09:16:14 [500] Oracle SQLBuilder: Registered driver: oracle.jdbc.driver.OracleDriver
04/08/05 09:16:14 [501] DCUtil.findSpelObject - Tokenizer : searchMasterNamesUIModel
04/08/05 09:16:14 [502] DCUtil.RETURNING oracle.jbo.uicli.binding.JUFormBinding
04/08/05 09:16:14 [503] **** refreshControl() for BindingContainer :searchMasterNamesUIModel
04/08/05 09:16:14 [504] *** DCDataControl.sync() called from :DCBindingContainer.refresh
04/08/05 09:16:14 [505] **** refreshControl() for BindingContainer :searchMasterNamesUIModel
04/08/05 09:16:14 [506] Changing iterator range size from :20 to :10
04/08/05 09:16:14 [507] *** DCDataControl.sync() called from :DCBindingContainer.refresh
04/08/05 09:16:14 [508] [RangeRefreshEvent: MasterNamesView1 start=0 count=0]
04/08/05 09:16:14 [509] SELECT MasterNames1.MNI, to_char(date_of_birth,'MM/DD/YYYY') AS DOB, MasterNames1.LAST_NAME, MasterNames1.EYE_COLOR, MasterNames1.HAIR_COLOR, MasterNames1.MIDDLE_NAME, MasterNames1.DATE_OF_BIRTH, MasterNames1.HEIGHT, MasterNames1.SUFFIX, MasterNames1.FIRST_NAME, MasterNames1.WEIGHT, MasterNames1.USER_INSERTED, MasterNames1.DATE_INSERTED, MasterNames1.SKIN_TONE, MasterNames1.LANGUAGE, MasterNames1.OCCUPATION, MasterNames1.PLACE_OF_BUSINESS, MasterNames1.E_MAIL_ADDRESS, MasterNames1.DATE_MODIFIED, MasterNames1.USER_MODIFIED, MasterNames1.ETHNICITY, MasterNames1.RACE, MasterNames1.MARITAL_STATUS, MasterNames1.SEX, MasterNames1.OFFENDER_COMMENTS, Last_Name||', '||First_Name AS FULLNAME FROM MASTER_NAMES MasterNames1 WHERE (upper(last_name) = 'SMITH' and upper(first_name) like '%') union all select MasterNames1.MNI, to_char(date_of_birth,'MM/DD/YYYY') AS DOB, MasterNames1.LAST_NAME, MasterNames1.EYE_COLOR, MasterNames1.HAIR_COLOR, MasterNames1.MIDDLE_NAME, MasterNames1.DATE_OF_BIRTH, MasterNames1.HEIGHT, MasterNames1.SUFFIX, MasterNames1.FIRST_NAME, MasterNames1.WEIGHT, MasterNames1.USER_INSERTED, MasterNames1.DATE_INSERTED, MasterNames1.SKIN_TONE, MasterNames1.LANGUAGE, MasterNames1.OCCUPATION, MasterNames1.PLACE_OF_BUSINESS, MasterNames1.E_MAIL_ADDRESS, MasterNames1.DATE_MODIFIED, MasterNames1.USER_MODIFIED, MasterNames1.ETHNICITY, MasterNames1.RACE, MasterNames1.MARITAL_STATUS, MasterNames1.SEX, MasterNames1.OFFENDER_COMMENTS, Last_Name||', '||First_Name AS FULLNAME FROM MASTER_NAMES MasterNames1 where mni in (select mni from pointer.aliases where upper(last_name) = 'SMITH' and upper(first_name) like '%')
04/08/05 09:16:14 [510] ViewObject: MasterNamesView1 Estimated Row Count Query Statement:
04/08/05 09:16:14 [511] "SELECT count(1) FROM (SELECT MasterNames1.MNI, to_char(date_of_birth,'MM/DD/YYYY') AS DOB, MasterNames1.LAST_NAME, MasterNames1.EYE_COLOR, MasterNames1.HAIR_COLOR, MasterNames1.MIDDLE_NAME, MasterNames1.DATE_OF_BIRTH, MasterNames1.HEIGHT, MasterNames1.SUFFIX, MasterNames1.FIRST_NAME, MasterNames1.WEIGHT, MasterNames1.USER_INSERTED, MasterNames1.DATE_INSERTED, MasterNames1.SKIN_TONE, MasterNames1.LANGUAGE, MasterNames1.OCCUPATION, MasterNames1.PLACE_OF_BUSINESS, MasterNames1.E_MAIL_ADDRESS, MasterNames1.DATE_MODIFIED, MasterNames1.USER_MODIFIED, MasterNames1.ETHNICITY, MasterNames1.RACE, MasterNames1.MARITAL_STATUS, MasterNames1.SEX, MasterNames1.OFFENDER_COMMENTS, Last_Name||', '||First_Name AS FULLNAME FROM MASTER_NAMES MasterNames1 WHERE (upper(last_name) = 'SMITH' and upper(first_name) like '%') union all select MasterNames1.MNI, to_char(date_of_birth,'MM/DD/YYYY') AS DOB, MasterNames1.LAST_NAME, MasterNames1.EYE_COLOR, MasterNames1.HAIR_COLOR, MasterNames1.MIDDLE_NAME, MasterNames1.DATE_OF_BIRTH, MasterNames1.HEIGHT, MasterNames1.SUFFIX, MasterNames1.FIRST_NAME, MasterNames1.WEIGHT, MasterNames1.USER_INSERTED, MasterNames1.DATE_INSERTED, MasterNames1.SKIN_TONE, MasterNames1.LANGUAGE, MasterNames1.OCCUPATION, MasterNames1.PLACE_OF_BUSINESS, MasterNames1.E_MAIL_ADDRESS, MasterNames1.DATE_MODIFIED, MasterNames1.USER_MODIFIED, MasterNames1.ETHNICITY, MasterNames1.RACE, MasterNames1.MARITAL_STATUS, MasterNames1.SEX, MasterNames1.OFFENDER_COMMENTS, Last_Name||', '||First_Name AS FULLNAME FROM MASTER_NAMES MasterNames1 where mni in (select mni from pointer.aliases where upper(last_name) = 'SMITH' and upper(first_name) like '%')) "
04/08/05 09:16:14 [512] ViewObject: MasterNamesView1 Estimated Row Count: 5
04/08/05 09:16:14 [513] DCBindingContainer.reportException :oracle.jbo.RowNotAvailableException
04/08/05 09:16:14 [514] oracle.jbo.RowNotAvailableException: JBO-25046: Requested row not available in row set iterator MasterNamesView1.
at oracle.jbo.client.remote.RowSetIteratorImpl.getAllRowsInRange(RowSetIteratorImpl.java:2002)
at oracle.jbo.client.remote.RowSetImpl.getAllRowsInRange(RowSetImpl.java:729)
at oracle.jbo.client.remote.ViewUsageImpl.getAllRowsInRange(ViewUsageImpl.java:1069)
at oracle.jbo.common.ws.WSRowSetIteratorBase.getAllRowsInRange(WSRowSetIteratorBase.java:746)
at oracle.adf.model.binding.DCIteratorBinding.getAllRowsInRange(DCIteratorBinding.java:1523)
at oracle.adf.model.binding.DCIteratorBinding.refreshControl(DCIteratorBinding.java:533)
at oracle.adf.model.binding.DCBindingContainer.refreshControl(DCBindingContainer.java:1580)
at oracle.adf.controller.lifecycle.PageLifecycle.refreshModel(PageLifecycle.java:677)
at oracle.adf.controller.struts.actions.DataAction.refreshModel(DataAction.java:374)
at oracle.adf.controller.struts.actions.DataAction.refreshModel(DataAction.java:563)
at oracle.adf.controller.lifecycle.PageLifecycle.handleLifecycle(PageLifecycle.java:128)
at oracle.adf.controller.struts.actions.DataAction.handleLifecycle(DataAction.java:233)
at oracle.adf.controller.struts.actions.DataAction.execute(DataAction.java:163)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1485)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:527)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
at oracle.security.jazn.oc4j.JAZNFilter.doFilter(Unknown Source)
at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:16)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:228)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:600)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
at java.lang.Thread.run(Thread.java:534)
04/08/05 09:16:14 [515] DCUtil.findSpelObject - Tokenizer : SearchMNUIModel
04/08/05 09:16:14 [516] DCUtil.RETURNING oracle.jbo.uicli.binding.JUFormBinding
04/08/05 09:16:14 [517] **** refreshControl() for BindingContainer :SearchMNUIModel
04/08/05 09:16:14 [518] Column count: 29
04/08/05 09:16:14 [519] ViewObject: MasterNamesView1 close prepared statements...
04/08/05 09:16:14 [520] ViewObject: MasterNamesView1 Created new QUERY statement
04/08/05 09:16:14 [521] SELECT MasterNames1.MNI, to_char(date_of_birth,'MM/DD/YYYY') AS DOB, MasterNames1.LAST_NAME, MasterNames1.EYE_COLOR, MasterNames1.HAIR_COLOR, MasterNames1.MIDDLE_NAME, MasterNames1.DATE_OF_BIRTH, MasterNames1.HEIGHT, MasterNames1.SUFFIX, MasterNames1.FIRST_NAME, MasterNames1.WEIGHT, MasterNames1.USER_INSERTED, MasterNames1.DATE_INSERTED, MasterNames1.SKIN_TONE, MasterNames1.LANGUAGE, MasterNames1.OCCUPATION, MasterNames1.PLACE_OF_BUSINESS, MasterNames1.E_MAIL_ADDRESS, MasterNames1.DATE_MODIFIED, MasterNames1.USER_MODIFIED, MasterNames1.ETHNICITY, MasterNames1.RACE, MasterNames1.MARITAL_STATUS, MasterNames1.SEX, MasterNames1.OFFENDER_COMMENTS, Last_Name||', '||First_Name AS FULLNAME FROM MASTER_NAMES MasterNames1 WHERE (upper(last_name) = 'SMITH' and upper(first_name) like '%') union all select MasterNames1.MNI, to_char(date_of_birth,'MM/DD/YYYY') AS DOB, MasterNames1.LAST_NAME, MasterNames1.EYE_COLOR, MasterNames1.HAIR_COLOR, MasterNames1.MIDDLE_NAME, MasterNames1.DATE_OF_BIRTH, MasterNames1.HEIGHT, MasterNames1.SUFFIX, MasterNames1.FIRST_NAME, MasterNames1.WEIGHT, MasterNames1.USER_INSERTED, MasterNames1.DATE_INSERTED, MasterNames1.SKIN_TONE, MasterNames1.LANGUAGE, MasterNames1.OCCUPATION, MasterNames1.PLACE_OF_BUSINESS, MasterNames1.E_MAIL_ADDRESS, MasterNames1.DATE_MODIFIED, MasterNames1.USER_MODIFIED, MasterNames1.ETHNICITY, MasterNames1.RACE, MasterNames1.MARITAL_STATUS, MasterNames1.SEX, MasterNames1.OFFENDER_COMMENTS, Last_Name||', '||First_Name AS FULLNAME FROM MASTER_NAMES MasterNames1 where mni in (select mni from pointer.aliases where upper(last_name) = 'SMITH' and upper(first_name) like '%') ORDER BY fullname
04/08/05 09:16:14 [522] Bind params for ViewObject: MasterNamesView1
04/08/05 09:16:14 [523] [RangeRefreshEvent: MasterNamesView1 start=0 count=5]
04/08/05 09:16:14 [524] A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'*** DCDataControl.sync() called from :somestring
04/08/05 09:16:14 [525] **** refreshControl() for BindingContainer :SearchMNUIModel
04/08/05 09:16:14 [526] DCUtil.findSpelObject - Tokenizer : showMasterNamesUIModel
04/08/05 09:16:14 [527] DCUtil.RETURNING oracle.jbo.uicli.binding.JUFormBinding
04/08/05 09:16:14 [528] **** refreshControl() for BindingContainer :showMasterNamesUIModel
04/08/05 09:16:14 [529] Changing iterator range size from :10 to :20
04/08/05 09:16:14 [530] *** DCDataControl.sync() called from :DCBindingContainer.refresh
04/08/05 09:16:14 [531] [RangeRefreshEvent: MasterNamesView1 start=0 count=5]
04/08/05 09:16:14 [532] A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'**** refreshControl() for BindingContainer :showMasterNamesUIModel
04/08/05 09:16:14 [533] *** DCDataControl.sync() called from :DCBindingContainer.refresh
04/08/05 09:16:14 [534] A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'Warning! Using introspection to lookup and return value for :Find
04/08/05 09:16:14 [535] A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'A formatting exception occured: DateOfBirthJBO-29000: Unexpected exception caught: java.lang.IllegalArgumentException, msg=Illegal pattern character 'Y'Application Module failover is enabled
04/08/05 09:16:14 [536] Getting a connection for internal use...
04/08/05 09:16:14 [537] Creating internal connection...
04/08/05 09:16:14 [538] Oracle SQLBuilder: Registered driver: oracle.jdbc.driver.OracleDriver
04/08/05 09:16:14 [539] <AM MomVer="0">
<cd/>
<TXN Def="1" New="0" Lok="1"/>
<VO>
<VO It="1" Sz="20" St="0" Ex="1" Def="model.MasterNamesView" Name="MasterNamesView1" cli="1">
<Wh>
<![CDATA[upper(last_name) = 'SMITH' and upper(first_name) like '%') union all select MasterNames1.MNI, to_char(date_of_birth,'MM/DD/YYYY') AS DOB, MasterNames1.LAST_NAME, MasterNames1.EYE_COLOR, MasterNames1.HAIR_COLOR, MasterNames1.MIDDLE_NAME, MasterNames1.DATE_OF_BIRTH, MasterNames1.HEIGHT, MasterNames1.SUFFIX, MasterNames1.FIRST_NAME, MasterNames1.WEIGHT, MasterNames1.USER_INSERTED, MasterNames1.DATE_INSERTED, MasterNames1.SKIN_TONE, MasterNames1.LANGUAGE, MasterNames1.OCCUPATION, MasterNames1.PLACE_OF_BUSINESS, MasterNames1.E_MAIL_ADDRESS, MasterNames1.DATE_MODIFIED, MasterNames1.USER_MODIFIED, MasterNames1.ETHNICITY, MasterNames1.RACE, MasterNames1.MARITAL_STATUS, MasterNames1.SEX, MasterNames1.OFFENDER_COMMENTS, Last_Name||', '||First_Name AS FULLNAME FROM MASTER_NAMES MasterNames1 where mni in (select mni from pointer.aliases where upper(last_name) = 'SMITH' and upper(first_name) like '%']]>
</Wh>
<Key>
<![CDATA[000100000003313431]]>
</Key>
</VO>
</VO>
</AM>
04/08/05 09:16:14 [540] **insert** id=1, parid=-1, collid=3051, keyArr.len=-1, cont.len=1416
04/08/05 09:16:14 [541] stmt: begin insert into "PS_TXN" values (:1, :2, :3, empty_blob(), sysdate) returning content into :4; end;
04/08/05 09:16:14 [542] **commit** #pending ops=1
04/08/05 09:16:15 [543] Getting a connection for internal use...
04/08/05 09:16:15 [544] Creating internal connection...
04/08/05 09:16:15 [545] Oracle SQLBuilder: Registered driver: oracle.jdbc.driver.OracleDriver
04/08/05 09:16:15 [546] **deleteAll** collid=3050
04/08/05 09:16:15 [547] stmt: delete "PS_TXN" where collid=:1
04/08/05 09:16:15 [548] **commit** #pending ops=1
Interestingly enough, it returns data correctly even if the exception is thrown. -
How to store data from a complex query and only fresh hourly or daily?
We have a report which runs quite slow (1-2 minutes) because the query is quite complicate, so we would like to run this query daily only and store in a table so for those procedures that need to use this complex query as a subquery, can just join to this table directly to get results.
However, I am not sure what kind of object I should use to store data for this complex query. Is data in global temp table only persist within transaction? I need something that can persist the data and be access by procedures.
Any suggestions are welcome,
CheersThank you for your reply. I looked at the materialized view earlier on, but have some difficulties to use it. So I have some questions here:
1.The complex query is not a sum or aggregate functions, it just need to get data from different tables based on different conditions, in this case is it still appropriate to use meterialized view?
2.If it is, I created one, but how to use it in my procedure? From the articles I read, it seems I can't just query from this view directly. So do I need to keep the complex query in my procedure and how the procedure will use the meterialized view instead?
3. I also put the complex query in a normal view, then create a materialized view for this normal view (I expect the data from the complex query will be cache here), then in the procedure I just select * from my_NormalView, but it takes the same time to run even when I set the QUERY_REWRITE_ENABLED to true in the alter session. So I am not sure what else I need to do to make sure the procedure use the materialized view instead of the normal view. Can I query from the Materialized View directly?
Below in the code I copied from one of the article to create the materialized view based on my normal view:
CREATE MATERIALIZED VIEW HK3ControlDB.MW_RIRating
PCTFREE 5 PCTUSED 60
TABLESPACE "USERS"
STORAGE (INITIAL 50K NEXT 50K)
USING INDEX STORAGE (INITIAL 25K NEXT 25K)
REFRESH START WITH ROUND(SYSDATE + 1) + 11/24
NEXT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 15/24
enable query rewrite
AS SELECT * FROM HK3ControlDB.VW_RIRating;
Cheers -
How can i imrove peroformance of complex Query
How can i improve performance of complex Query
which used CASE WHEN , GROUP By Rollup
for example
SELECT CASE WHEN null then a
ELSE b END
FROM (
SELECT a,b,c,..........
FROM table1
UNION ALL
SELECT a,b,c,..........
FROM table2
GROUP BY ROLLUP a,b,c ,............
this query take 18 min to return 180000 record
is there is any way to improve the performance of this queryHello
Have you considered using
ALTER SYSTEM SET _fast=TRUE;-)
Alternatively you could provide some more information such as an execution plan for your query:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
SQL> set linesize 200
SQL> set pages 50000
SQL> EXPLAIN PLAN FOR
2 select * from dual;
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | | | |
| 1 | TABLE ACCESS FULL | DUAL | | | |
Note: rule based optimization
9 rows selected.If you want general info on tuning, I suggest you read the Perfomance tuning guide and the Data Warehousing guide. These are the best place to find information about concepts and techniques. The forums are better suited to specific questions.
HTH
David -
Hi!!
First of all sorry for the long thread but i really don't know how to explain otherwise. Please let me know if my question is not clear enough. I hope that this is possible.
I have the follwing query:
SELECT MAX(CASE WHEN t.plate_column=1 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c1,
MAX(CASE WHEN t.plate_column=2 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c2,
MAX(CASE WHEN t.plate_column=3 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c3,
MAX(CASE WHEN t.plate_column=4 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c4,
MAX(CASE WHEN t.plate_column=5 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c5,
MAX(CASE WHEN t.plate_column=6 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c6,
MAX(CASE WHEN t.plate_column=7 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c7,
MAX(CASE WHEN t.plate_column=8 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c8,
MAX(CASE WHEN t.plate_column=9 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c9,
MAX(CASE WHEN t.plate_column=10 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c10,
MAX(CASE WHEN t.plate_column=11 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c11,
MAX(CASE WHEN t.plate_column=12 THEN t.u_box_code || '-' || t.u_box_position ELSE null END) c12
FROM ( SELECT plate.plate_id,
aliquot.plate_column,
aliquot.plate_row,
sample_user.u_box_code,
sample_user.u_box_position,
sample_user.u_box_column,
sample_user.u_box_row
FROM lims_sys.plate, lims_sys.aliquot,lims_sys.sample,lims_sys.sample_user
WHERE plate.plate_id = aliquot.plate_id
AND aliquot.sample_id = sample.sample_id
AND sample.sample_id = sample_user.sample_id
AND plate.plate_id IN (874)
) t
GROUP BY t.plate_id,t.plate_row
ORDER BY t.plate_id,t.plate_row
[pre/]
The results of this query are:
[pre]
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
F515-C07 F515-C08 F515-C09 F515-C10 F515-G05 F515-G06 F515-G07 F515-G08 F515-G09 F516-G10
F516-G11 F516-G12 F516-H01 F516-H02 F516-H03 F516-H04 F516-H05 F516-H06 F516-H07 N451-C04 N451-C05 N451-C06
N451-C07 N451-C08 N451-C09 N451-G02 N451-G03 N451-G04 N452-F11 N452-F12 N452-G01 N452-G02 N452-G03
N452-G04 N452-G05 N452-G06 N452-G07 N452-G08 N453-B05 N453-B06 N458-A11 N458-A12 N458-B03
N458-B04 N458-B05 N458-B06 N458-B07 N458-B08 N458-B09 N458-B10 N458-B11 N458-B12 N458-C01 N458-C02 N458-C03
N458-C04 N458-C05 N458-C06 N458-C07 N458-C08 N458-C09 N458-C10 N458-C11 N458-C12 N458-D01 N458-D02 N458-D03
N458-D04 N458-D05 N458-D06 N458-D07 N458-D08 N458-D09 N458-D10 N458-D11 N458-D12 N458-E03
N458-E04 N458-E05 N458-E06 N458-E07 N458-E08 N458-E09 N458-E10 N458-E11 N458-E12 N458-F01 N458-F02 N458-F03
[pre/]
What I actually want is that for each new u_box_code a status (C1status, C2status etc.) for every value change from 0 to 1 to 0 to 1 etc.Then the wanted results looks like:
[pre]
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C1status C2status C3status C4status C5status C6status C7status C8status C9status C10status C11status C12status
F515-C07 F515-C08 F515-C09 F515-C10 F515-G05 F515-G06 F515-G07 F515-G08 F515-G09 F516-G10 0 0 0 0 0 0 0 0 0 1
F516-G11 F516-G12 F516-H01 F516-H02 F516-H03 F516-H04 F516-H05 F516-H06 F516-H07 N451-C04 N451-C05 N451-C06 1 1 1 1 1 1 1 1 1 0 0 0
N451-C07 N451-C08 N451-C09 N451-G02 N451-G03 N451-G04 N452-F11 N452-F12 N452-G01 N452-G02 N452-G03 0 0 0 0 0 0 1 1 1 1 1
N452-G04 N452-G05 N452-G06 N452-G07 N452-G08 N453-B05 N453-B06 N458-A11 N458-A12 N458-B03 1 1 1 1 1 0 0 1 1 1
N458-B04 N458-B05 N458-B06 N458-B07 N458-B08 N458-B09 N458-B10 N458-B11 N458-B12 N458-C01 N458-C02 N458-C03 1 1 1 1 1 1 1 1 1 1 1 1
N458-C04 N458-C05 N458-C06 N458-C07 N458-C08 N458-C09 N458-C10 N458-C11 N458-C12 N458-D01 N458-D02 N458-D03 1 1 1 1 1 1 1 1 1 1 1 1
N458-D04 N458-D05 N458-D06 N458-D07 N458-D08 N458-D09 N458-D10 N458-D11 N458-D12 N458-E03 1 1 1 1 1 1 1 1 1 1
N458-E04 N458-E05 N458-E06 N458-E07 N458-E08 N458-E09 N458-E10 N458-E11 N458-E12 N458-F01 N458-F02 N458-F03 1 1 1 1 1 1 1 1 1 1 1 1
[pre/]
The most difficult part is the combination of the wanted results from thread complex query and this.
Conclusion:
The final results must be :
[pre]
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C1status C2status C3status C4status C5status C6status C7status C8status C9status C10status C11status C12status
C07-F515 C10-F515 G05-F515 G09-F515 G10-F516 0 0 0 0 0 0 0 0 0 1
G11-F516 G12-F516 H01-F516 H07-F516 C04-N451 C06-N451 1 1 1 1 1 1 1 1 1 0 0 0
C07-N451 C09-N451 G02-N451 G03-N451 G04-N451 F11-N452 F12-N452 G01-N452 G02-N452 G03-N452 0 0 0 0 0 0 1 1 1 1 1
G04-N452 G08-N452 B05-N453 B06-N453 A11-N458 A12-N458 B03-N458 1 1 1 1 1 0 0 1 1 1
B04-N458 B12-N458 C01-N458 C03-N458 1 1 1 1 1 1 1 1 1 1 1 1
C04-N458 C12-N458 D01-N458 D03-N458 1 1 1 1 1 1 1 1 1 1 1 1
D04-N458 D12-N458 E03-N458 1 1 1 1 1 1 1 1 1 1
E04-N458 E12-N458 F01-N458 F03-N458 1 1 1 1 1 1 1 1 1 1 1 1
[pre/]
The query of this without the statusses is:
[pre]
SELECT c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,plate_id,plate_row
FROM ( SELECT c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12, rownum r1,plate_id,plate_row
FROM ( SELECT MAX(CASE WHEN t.plate_column=1 THEN t.u_box_position|| '-' || t.u_box_code ELSE null END) c1,
MAX(CASE WHEN t.plate_column=2 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c2,
MAX(CASE WHEN t.plate_column=3 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c3,
MAX(CASE WHEN t.plate_column=4 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c4,
MAX(CASE WHEN t.plate_column=5 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c5,
MAX(CASE WHEN t.plate_column=6 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c6,
MAX(CASE WHEN t.plate_column=7 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c7,
MAX(CASE WHEN t.plate_column=8 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c8,
MAX(CASE WHEN t.plate_column=9 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c9,
MAX(CASE WHEN t.plate_column=10 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c10,
MAX(CASE WHEN t.plate_column=11 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c11,
MAX(CASE WHEN t.plate_column=12 THEN t.u_box_position || '-' || t.u_box_code ELSE null END) c12,
t.plate_id,
t.plate_row
FROM ( SELECT plate.plate_id,
aliquot.plate_column,
aliquot.plate_row,
sample_user.u_box_code,
sample_user.u_box_position,
sample_user.u_box_column,
sample_user.u_box_row
FROM lims_sys.plate, lims_sys.aliquot,lims_sys.sample,lims_sys.sample_user
WHERE plate.plate_id = aliquot.plate_id
AND aliquot.sample_id = sample.sample_id
AND sample.sample_id = sample_user.sample_id
AND plate.plate_id IN (874)
) t,
( SELECT min(u_box_column) min_col ,max(u_box_column) max_col,u_box_row,u_box_code,plate_row
FROM ( SELECT plate.plate_id,
aliquot.plate_column,
aliquot.plate_row,
sample_user.u_box_code,
sample_user.u_box_position,
sample_user.u_box_column,
sample_user.u_box_row
FROM lims_sys.plate, lims_sys.aliquot,lims_sys.sample,lims_sys.sample_user
WHERE plate.plate_id = aliquot.plate_id
AND aliquot.sample_id = sample.sample_id
AND sample.sample_id = sample_user.sample_id
AND plate.plate_id IN (874))
GROUP BY u_box_row,u_box_code,plate_row
) s
WHERE t.u_box_column in (min_col,max_col)
AND t.u_box_row = s.u_box_row
AND t.plate_row = s.plate_row
GROUP BY t.plate_id,t.plate_row
ORDER BY t.plate_id,t.plate_row)
) a,
( SELECT rownum r2
FROM all_objects
WHERE rownum <9
) b
WHERE a.r1(+) = b.r2
[pre/]Hi,
Your query does not work. when i exttract the subqueries i get the message "not a group by expression" on plate_column with subquery:I fired the below query posted by me and got the output. Its not giving any error for me.
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12
F515-C07 F515-C10 F515-G05 F515-G09 F516-G10 0 0 0 0 0 0 0 0 0 1
F516-G11 F516-G12 F516-H01 F516-H07 N451-C04 N451-C06 1 1 1 1 1 1 1 1 1 0 0 0
N451-C07 N451-C09 N451-G02 N451-G03 N451-G04 N452-F11 N452-F12 N452-G01 N452-G02 N452-G03 0 0 0 0 0 0 1 1 1 1 1
N452-G04 N452-G08 N453-B05 N453-B06 N458-A11 N458-A12 N458-B03 1 1 1 1 1 0 0 1 1 1
N458-B04 N458-B12 N458-C01 N458-C03 1 1 1 1 1 1 1 1 1 1 1 1
N458-C04 N458-C12 N458-D01 N458-D03 1 1 1 1 1 1 1 1 1 1 1 1
N458-D04 N458-D12 N458-E03 1 1 1 1 1 1 1 1 1 1
N458-E04 N458-E12 N458-F01 N458-F03 1 1 1 1 1 1 1 1 1 1 1 1
Also the subquery you posted me saying that it gives error also gives the output.
select rownum rn,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12
from (
select (select status from stat where box_code = st1) s1,
(select status from stat where box_code = st2) s2,
(select status from stat where box_code = st3) s3,
(select status from stat where box_code = st4) s4,
(select status from stat where box_code = st5) s5,
(select status from stat where box_code = st6) s6,
(select status from stat where box_code = st7) s7,
(select status from stat where box_code = st8) s8,
(select status from stat where box_code = st9) s9,
(select status from stat where box_code = st10) s10,
(select status from stat where box_code = st11) s11,
(select status from stat where box_code = st12) s12
from (
select MAX(CASE WHEN plate_column=1 THEN t.u_box_code ELSE null END) st1,
MAX(CASE WHEN plate_column=2 THEN t.u_box_code ELSE null END) st2,
MAX(CASE WHEN plate_column=3 THEN t.u_box_code ELSE null END) st3,
MAX(CASE WHEN plate_column=4 THEN t.u_box_code ELSE null END) st4,
MAX(CASE WHEN plate_column=5 THEN t.u_box_code ELSE null END) st5,
MAX(CASE WHEN plate_column=6 THEN t.u_box_code ELSE null END) st6,
MAX(CASE WHEN plate_column=7 THEN t.u_box_code ELSE null END) st7,
MAX(CASE WHEN plate_column=8 THEN t.u_box_code ELSE null END) st8,
MAX(CASE WHEN plate_column=9 THEN t.u_box_code ELSE null END) st9,
MAX(CASE WHEN plate_column=10 THEN t.u_box_code ELSE null END) st10,
MAX(CASE WHEN plate_column=11 THEN t.u_box_code ELSE null END) st11,
MAX(CASE WHEN plate_column=12 THEN t.u_box_code ELSE null END) st12
from t
group by plate_id,plate_row
o/p :
RN S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12
1 0 0 0 0 0 0 0 0 0 1
2 1 1 1 1 1 1 1 1 1 0 0 0
3 0 0 0 0 0 0 1 1 1 1 1
4 1 1 1 1 1 0 0 1 1 1
5 1 1 1 1 1 1 1 1 1 1 1 1
6 1 1 1 1 1 1 1 1 1 1 1 1
7 1 1 1 1 1 1 1 1 1 1
8 1 1 1 1 1 1 1 1 1 1 1 1
Rgds
Sandesh -
I created a complex query to extract data from Journal entry and from Journal voucher. I post here a simplified version where I have deleted UDO references.
I buit it in the Query analizer and it runs ok.
I copied in SAP and it runs ok too.
Now, I need to ask for the start date and end date, as in the first lines of script. But SAP raise an error message I dont understand. I tried to use '[%0]' and '[%1]' insthead of '2008/01/01' and '2008/02/29'
DECLARE @D1 DATETIME
DECLARE @D2 DATETIME
SET @D1='2008/01/01'
SET @D2='2008/02/29'
SELECT * FROM
SELECT
A.ACCOUNT AS 'CO.GE ITALIA',
OACT.ACCTNAME AS 'NOME CO.GE ITALIA',
SUM(CASE WHEN (A.ACCOUNT>='500000' AND A.ACCOUNT<'600000' AND DEBIT<>0) THEN -DEBIT WHEN (A.ACCOUNT>='600000' AND A.ACCOUNT<'700000')THEN 0 ELSE CREDIT END -
CASE WHEN (A.ACCOUNT>='500000' AND A.ACCOUNT<'600000') THEN 0 WHEN (A.ACCOUNT>='600000' AND A.ACCOUNT<'700000' AND CREDIT<>0)THEN -CREDIT ELSE DEBIT END) AS 'TOTALE'
FROM (
SELECT BTF1.* FROM BTF1
UNION ALL
SELECT JDT1.* FROM JDT1
) AS A
LEFT JOIN OACT ON (OACT.ACCTCODE=A.ACCOUNT)
LEFT JOIN OBTF ON (OBTF.BATCHNUM=A.BATCHNUM AND OBTF.TRANSID=A.TRANSID)
WHERE A.REFDATE>=@D1 AND A.REFDATE<=@D2 AND (OBTF.BTFSTATUS<>'C' OR OBTF.BTFSTATUS IS NULL) AND (OACT.U_CUENTA<>'' AND OACT.U_CUENTA IS NOT NULL) AND (OACT.U_CUENTA<>'432000000')
GROUP BY A.ACCOUNT, OACT.ACCTNAME
UNION ALL
SELECT
A.SHORTNAME AS 'CO.GE ITALIA',
OCRD.CARDNAME AS 'NOME CO.GE ITALIA',
SUM(CASE WHEN (A.ACCOUNT>='500000' AND A.ACCOUNT<'600000' AND DEBIT<>0) THEN -DEBIT WHEN (A.ACCOUNT>='600000' AND A.ACCOUNT<'700000')THEN 0 ELSE CREDIT END -
CASE WHEN (A.ACCOUNT>='500000' AND A.ACCOUNT<'600000') THEN 0 WHEN (A.ACCOUNT>='600000' AND A.ACCOUNT<'700000' AND CREDIT<>0)THEN -CREDIT ELSE DEBIT END) AS 'TOTALE'
FROM (
SELECT BTF1.* FROM BTF1
UNION ALL
SELECT JDT1.* FROM JDT1
) AS A
LEFT JOIN OACT ON (OACT.ACCTCODE=A.ACCOUNT)
LEFT JOIN OBTF ON (OBTF.BATCHNUM=A.BATCHNUM AND OBTF.TRANSID=A.TRANSID)
LEFT JOIN OCRD ON (OCRD.CARDCODE=A.SHORTNAME)
WHERE A.REFDATE>=@D1 AND A.REFDATE<=@D2 AND (OBTF.BTFSTATUS<>'C' OR OBTF.BTFSTATUS IS NULL) AND (OACT.U_CUENTA<>'' AND OACT.U_CUENTA IS NOT NULL) AND (OACT.U_CUENTA='432000000')
GROUP BY A.SHORTNAME, OCRD.CARDNAME
) AS BThank you to everybody for your answers.
I need to know more about this way to declare a variable in SAP.
This is my question:
If I need to filter by date a result from a Union All select, is sufficent to declare the Date Variable for one of the two tables in the Union All?
Following a simple code to explain my dubt:
DECLARE @D1 DATETIME
DECLARE @D2 DATETIME
SET @D1='2008/01/01'
SET @D2='2008/02/29'
SELECT A.ACCOUNT, A.DEBIT, A.CREDIT FROM
SELECT * FROM JDT1
UNION ALL
SELECT * FROM BTF1
) AS A
WHERE A.REFDATE>=@D1 AND A.REFDATE<=@D2
Do you think the WHERE statment will continue to run as well for the Union All in the script main too?
This is the modified initial code:
/*SELECT * FROM JDT1 T0*/
DECLARE @D1 DATETIME
DECLARE @D2 DATETIME
/* WHERE */
SET @D1=/* T0.REFDATE */ '[%0]'
SET @D2=/* T0.REFDATE */ '[%1]'
Thanks in advance,
Jonny Cortonicchi -
1. How to create an explain plan with rowsource statistics for a complex query that include multiple table joins ?
When multiple tables are involved , and the actual number of rows returned is more than what the explain plan tells. How can I find out what change is needed in the stat plan ?
2. Does rowsource statistics gives some kind of understanding of Extended stats ?You can get Row Source Statistics only *after* the SQL has been executed. An Explain Plan midway cannot give you row source statistics.
To get row source statistics either set STATISTICS_LEVEL='ALL' in the session that executes theSQL OR use the Hint "gather_plan_statistics" in the SQL being executed.
Then use dbms_xplan.display_cursor
Hemant K Chitale -
I am novice in PL/Sql. I need some help in writing a complex query.
I imagine the following table structure.
Type(string) Date(date) count(int)
Given a date range
The query needs to group the records on type and return the record (type and count) which has the max date (its just date, no time is involved) for each group (which is based on type) . If there are more than one records which have the max date then the average count should be returned for that type
i would be glad if someone could give any ideas as to how to go about this query. Thanking you in advance.
regards.Heres the query ... Forget the period .... wht this query is supposed to do is group on assigned ki for a given date range. then it has to get the value which is for the last record for that Ki in the date range. If there are 2 records which have max date then it should give an average.
e.g
assignedKI / date / value
a 1st may 2008 10
b 2nd may 2008 12
c 1st may 2008 13
a 30 - apr-2008 16
b 4th may 2008 17
a 1st may 2008 20
The query should return
a 1st may 2008 15 (which is the average as there are 2 values for the max date for a)
b 4th may 2008 17
c 1st may 2008 13
the following query doesnot work ....
SELECT
kiv2.assigned_k_i,
kiv2.ki_name,
kiv.period,
max( kiv2.ki_value_date) ,
avg(kiv2.ki_value)
FROM
SELECT
assigned_k_i,
period p1,
TO_CHAR(ki_value_date, period) period,
MAX(ki_value_date) ki_value_date
FROM
v_ki_value,
(select ? period from dual)
WHERE
(status = 'APPROVED' OR status = 'AUTOAPPROVED')
AND ( trunc(to_date(to_char(ki_value_date, 'DD/MM/YYYY'), 'DD/MM/YYYY')) >= ?)
AND ( trunc(to_date(to_char(ki_value_date, 'DD/MM/YYYY'), 'DD/MM/YYYY')) <= ?)
AND (INSTR(?, TO_CHAR(assigned_k_i)) > 0)
GROUP BY
assigned_k_i,
TO_CHAR(ki_value_date, period)
) kiv,
v_ki_value kiv2
WHERE
kiv.assigned_k_i = kiv2.assigned_k_i
AND to_char(kiv.ki_value_date, kiv.p1) = to_char(kiv2.ki_value_date, kiv.p1)
GROUP BY
kiv2.assigned_k_i,
kiv2.ki_name,
kiv.period,
kiv2.ki_value
ORDER BY
kiv2.assigned_k_i -
How to bind local variables in complex query in PL/SQL
Hi
I have long complex query with local varibales; when I run in Dynamic SQL I get an error. Not sure which is the easiest way to bind local variables.
L_QUERY := q'[select m.segment1 col1,
'1' col2,
'13' col3,
l.operand col4,
0 col5,
'Y' col8,
'N' col9,
'N' col10,
decode(h.name,'09_UKOR_*','EOS Credit','10_UKOR_*','TopUp','11_UKOR_*','Main') col18
from qp_list_headers_v h,
qp_list_lines_v l,
mtl_system_items m
where h.name in ('09_UKOR_*','10_UKOR_*','11_UKOR_*')
and h.list_header_id = l.list_header_id
and m.inventory_item_id = l.product_attr_value
and m.organization_id = 84
UNION all
SELECT qs.PRODUCT_ATTR_VALUE col1,
hca.account_number col2,
decode (su.site_use_code,'BILL_TO','21','SHIP_TO','18') col3,
0 col4,
qs.operand col5,
null col6,
null col7,
'N' col8,
'Y' col9,
'N' col10,
--Local variables
(case when (trunc(nvl(qq.start_date_active,sysdate)) between l_cur_year_from and l_cur_year_to) and
( trunc(nvl(qq.end_date_active,l_cur_year_to)) >= trunc(l_cur_year_to) ) then 'TopUp'
when (trunc(qq.start_date_active) between l_next_year_from and l_next_year_to) and
( trunc(nvl(qq.end_date_active,l_next_year_to)) >= l_next_year_to) then 'Main'
when (trunc(qq.start_date_active) between l_last_year_from and l_last_year_to) and
( trunc(nvl(qq.end_date_active,l_last_year_to)) >= l_last_year_to ) then 'EOS Return'
end )col18,
--Local variables
(case when (trunc(qq.start_date_active) between l_next_year_from and l_next_year_to) and
( trunc(nvl(qq.end_date_active,l_next_year_to)) >= l_cur_year_to ) then 'N'
else
'Y' end ) col21
FROM qp.qp_list_headers_b qlhb,
qp.qp_list_headers_tl qlht,
qp.qp_qualifiers qq,
qp_modifier_summary_v qs,
hz_cust_site_uses_all su,
hz_cust_acct_sites_all sa,
hz_cust_accounts hca
WHERE 1=1
and qlhb.LIST_TYPE_CODE = 'DLT'
and nvl(qlhb.active_flag,'Y') = 'Y'
and qlhb.list_header_id = qlht.list_header_id
AND qq.list_header_id = qlhb.list_header_id
and qq.list_type_code = qlhb.LIST_TYPE_CODE
and qq.QUALIFIER_CONTEXT = 'CUSTOMER'
and qs.list_header_id = qlhb.list_header_id
and qs.LIST_LINE_TYPE_CODE = 'DIS'
and su.site_use_id = qq.qualifier_attr_value --1064
AND su.cust_acct_site_id = sa.cust_acct_site_id
AND sa.cust_account_id = hca.cust_account_id ]';
--call Dynamic SQL function
l_cursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(l_cursor, p_QUERY , DBMS_SQL.NATIVE);
l_rows := DBMS_SQL.EXECUTE(l_cursor);
Any help will be much appreciated.
iI guess I should use DBMS_SQL.BIND_VARIABLE to bind all variables seperately so not to mess with query1) What is the error you get?
2) If you use bind variables inside a query, you should prefix them with colons, so use :l_cur_year_from etc.
3) Why are you using dbms_sql instead of native dynamic sql and/or ref-cursors?
Toon -
Trying to form complex query - need help
I have a fairly complex query that I need to join the results of to show actual and goal by day. The actuals are an aggregation of records that get put in every day, while the targets are a single entry in range format indicating an active range for which the target applies. I'm working on a query that will put things together by month and I'm running into a snag. Can someone please point out where appropriate naming needs to go to get this to come together?
This one works:
(select DATE_INDEX, SUM(LDS) as TTLLDS, SUM(TONS) as TTLTONS from
(select DATE_INDEX, VEH_LOC, SUM(LDS) as LDS, SUM(WT) as TONS from
(select c.DATE_INDEX, c.VEH_LOC, COUNT(j.LOAD_JOB_ID) as LDS,
CASE WHEN SUM(w.SPOT_WEIGHT) = 0 THEN SUM(j.MAN_SPOT_WT)
ELSE SUM(w.SPOT_WEIGHT)
END as WT
from TC c, TC_LOAD_JOBS j, LOAD_RATES r, SPOT_WEIGHTS w
where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
and c.DATE_INDEX = w.DATE_INDEX and j.LOAD_RATE_ID = w.LOAD_RATE_ID
and c.VEH_LOC in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
group by c.DATE_INDEX, c.VEH_LOC
union
select c.DATE_INDEX, c.VEH_LOC, COUNT(j.JOB_ID) as LDS,
DECODE(SUM(j.AVG_SPOT_WEIGHT),0,SUM(r.BID_TONS),SUM(j.AVG_SPOT_WEIGHT)) as WT
from TC_3RDPARTY c, TC_3RDPARTY_JOBS j, LOAD_RATES r
where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
and j.FACTORY_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
group by c.DATE_INDEX, c.VEH_LOC)
group by DATE_INDEX, VEH_LOC)
group by DATE_INDEX)Now I need to add in the following query:
select (u.MACH_TPH_D+u.MACH_TPH_N)/2 as MTPH_TGT, (u.LABOR_TPH_D+u.LABOR_TPH_N)/2 as LTPH_TGT
from UTIL_TARGET_LOADERS u
where u.ORG_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)The join needs to be based on VEH_LOC and DAY in the form:
... WHERE u.ORG_ID = x.VEH_LOC
AND x.DATE_INDEX between u.START_DATE and NVL(u.END_DATE,sysdate)I had one that worked just fine when only one entity was involved; the complication arises in that this is a division-level report so I have to individually resolve the subordinates and their goals before I can aggregate. This is one of two queries I need to tie together using a WITH clause so I can pivot the whole thing and present it in month-by-month fashion. When I try to tie it together like the query below, I get: invalid relational operator.
select ttls.DATE_INDEX, SUM(ttls.LDS) as TTLLDS, SUM(ttls.TONS) as TTLTONS, u.TARGET_LTPH, u.TARGET_MTPH
from UTIL_TARGET_LOADERS u,
(select DATE_INDEX, VEH_LOC, SUM(LDS) as LDS, SUM(WT) as TONS from
(select c.DATE_INDEX, c.VEH_LOC, COUNT(j.LOAD_JOB_ID) as LDS,
CASE WHEN SUM(w.SPOT_WEIGHT) = 0 THEN SUM(j.MAN_SPOT_WT)
ELSE SUM(w.SPOT_WEIGHT)
END as WT
from TC c, TC_LOAD_JOBS j, LOAD_RATES r, SPOT_WEIGHTS w
where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
and c.DATE_INDEX = w.DATE_INDEX and j.LOAD_RATE_ID = w.LOAD_RATE_ID
and c.VEH_LOC in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
group by c.DATE_INDEX, c.VEH_LOC
union
select c.DATE_INDEX, c.VEH_LOC, COUNT(j.JOB_ID) as LDS,
DECODE(SUM(j.AVG_SPOT_WEIGHT),0,SUM(r.BID_TONS),SUM(j.AVG_SPOT_WEIGHT)) as WT
from TC_3RDPARTY c, TC_3RDPARTY_JOBS j, LOAD_RATES r
where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
and j.FACTORY_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
group by c.DATE_INDEX, c.VEH_LOC)
group by DATE_INDEX, VEH_LOC) ttls
where ttls.DATE_INDEX beween u.START_DATE and NVL(u.END_DATE,sysdate)
and ttls.VEH_LOC = u.ORG_ID
group by ttls.DATE_INDEXI know this is a nested mess, as it has to grab the production from two tables for a range of VEH_LOC values and sum and aggregate by day and VEH_LOC, then I have to try and match that to the targets based on VEH_LOC and day. My final query is to aggregate the whole mess of sums and averages by month.
I'd appreciate it if someone can point me in the right direction.Figured it out.
select ttl.DATE_INDEX, SUM(ttl.LDS) as TTLLDS, SUM(ttl.TONS) as TTLTONS,
AVG((u.MACH_TPH_D+u.MACH_TPH_N)/2) as MTPH_TGT,
AVG((u.LABOR_TPH_D+u.LABOR_TPH_N)/2) as LTPH_TGT
from
(select DATE_INDEX, VEH_LOC, SUM(LDS) as LDS, SUM(WT) as TONS from
(select c.DATE_INDEX, c.VEH_LOC, COUNT(j.LOAD_JOB_ID) as LDS,
CASE WHEN SUM(w.SPOT_WEIGHT) = 0 THEN SUM(j.MAN_SPOT_WT)
ELSE SUM(w.SPOT_WEIGHT)
END as WT
from TC c, TC_LOAD_JOBS j, LOAD_RATES r, SPOT_WEIGHTS w
where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
and c.DATE_INDEX = w.DATE_INDEX and j.LOAD_RATE_ID = w.LOAD_RATE_ID
and c.VEH_LOC in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
group by c.DATE_INDEX, c.VEH_LOC
union
select c.DATE_INDEX, c.VEH_LOC, COUNT(j.JOB_ID) as LDS,
DECODE(SUM(j.AVG_SPOT_WEIGHT),0,SUM(r.BID_TONS),SUM(j.AVG_SPOT_WEIGHT)) as WT
from TC_3RDPARTY c, TC_3RDPARTY_JOBS j, LOAD_RATES r
where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
and j.FACTORY_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
group by c.DATE_INDEX, c.VEH_LOC)
group by DATE_INDEX, VEH_LOC) ttl, UTIL_TARGET_LOADERS u
where u.ORG_ID = ttl.VEH_LOC
and ttl.DATE_INDEX between u.START_DATE and NVL(U.END_DATE,sysdate)
group by ttl.DATE_INDEX, (u.LABOR_TPH_D+u.LABOR_TPH_N)/2 -
Need complex query with joins and AGGREGATE functions.
Hello Everyone ;
Good Morning to all ;
I have 3 tables with 2 lakhs record. I need to check query performance.. How CBO rewrites my query in materialized view ?
I want to make complex join with AGGREGATE FUNCTION.
my table details
SQL> select from tab;*
TNAME TABTYPE CLUSTERID
DEPT TABLE
PAYROLL TABLE
EMP TABLE
SQL> desc emp
Name
EID
ENAME
EDOB
EGENDER
EQUAL
EGRADUATION
EDESIGNATION
ELEVEL
EDOMAIN_ID
EMOB_NO
SQL> desc dept
Name
EID
DNAME
DMANAGER
DCONTACT_NO
DPROJ_NAME
SQL> desc payroll
Name
EID
PF_NO
SAL_ACC_NO
SALARY
BONUS
I want to make complex query with joins and AGGREGATE functions.
Dept names are : IT , ITES , Accounts , Mgmt , Hr
GRADUATIONS are : Engineering , Arts , Accounts , business_applications
I want to select records who are working in IT and ITES and graduation should be "Engineering"
salary > 20000 and < = 22800 and bonus > 1000 and <= 1999 with count for males and females Separately ;
Please help me to make a such complex query with joins ..
Thanks in advance ..
Edited by: 969352 on May 25, 2013 11:34 AM969352 wrote:
why do you avoid providing requested & NEEDED details?I do NOT understand what do you expect ?
My Goal is :
1. When executing my own query i need to check expalin plan.please proceed to do so
http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_9010.htm#SQLRF01601
2. IF i enable query rewrite option .. i want to check explain plan ( how optimizer rewrites my query ) ? please proceed to do so
http://docs.oracle.com/cd/E11882_01/server.112/e16638/ex_plan.htm#PFGRF009
3. My only aim is QUERY PERFORMANCE with QUERY REWRITE clause in materialized view.It is an admirable goal.
Best Wishes on your quest for performance improvements. -
Complex Query in toplink descriptor
I have a complex query with "Order by" and "Max" aggregation function and I am trying to convert it to a named query. I am using toplink descriptor in Jdeveloper 11G.
1. Is it possible to write a named query which returns values from more than two different table?
2. how to specify Max operation in the Toplink descriptor.
Here is my Query
select * from table1 t1 ,table2 t2
where
t1.id = t2.id and
t1.name ='Name' and
t1.status<>'DELETE' and
t2.a_id = (select max(a_id) from table2 t21 where
t21.a_id = t1.id and
group by id)TopLink supports sub-selects through sub-queries in TopLink Expressions, and through JPQL. I'm not sure on the JDev support though, you may need to use a code customizer or amendment to add the named query.
James : http://www.eclipselink.org -
Complex Query which needs tuning
Hello :
I have a complex query that needs to be tuned. I have little experience in tuning the sql and hence taking the help of your guys.
The Query is as given below:
Database version 11g
SELECT DISTINCT P.RESPONSIBILITY, P.PRODUCT_MAJOR, P.PRODUCT_MINOR,
P.PRODUCT_SERIES, P.PRODUCT_CATEGORY AS Category1, SO.REGION_CODE,
SO.STORE_CODE, S.Store_Name, SOL.PRODUCT_CODE, PRI.REPLENISHMENT_TYPE,
PRI.SUPPLIER_CODE,
SOL.SOLD_WITH_NIC, SOL.SUGGESTED_PRICE,
PRI.INVOICE_COST, SOL.FIFO_COST,
SO.ORDER_TYPE_CODE, SOL.DOCUMENT_NUM,
SOS.SLSP_CD, '' AS FNAME, '' AS LNAME,
SOL.PRICE_EXCEPTION_CODE, SOL.AS_IS,
SOL.STATUS_DATE,
Sum(SOL.QUANTITY) AS SumOfQUANTITY,
Sum(SOL.EXTENDED_PRICE) AS SumOfEXTENDED_PRICE
--Format([SALES_ORDER].[STATUS_DATE],"mmm-yy") AS [Month]
FROM PRODUCT P,
PRODUCT_MAJORS PM,
SALES_ORDER_LINE SOL,
STORE S,
SALES_ORDER SO,
SALES_ORDER_SPLITS SOS,
PRODUCT_REGIONAL_INFO PRI,
REGION_MAP R
WHERE P.product_major = PM.PRODUCT_MAJOR
and SOL.PRODUCT_CODE = P.PRODUCT_CODE
and SO.STORE_CODE = S.STORE_CODE
AND SO.REGION_CODE = S.REGION_CODE
AND SOL.REGION_CODE = SO.REGION_CODE
AND SOL.DOCUMENT_NUM = SO.DOCUMENT_NUM
AND SOL.DELIVERY_SEQUENCE_NUM = SO.DELIVERY_SEQUENCE_NUM
AND SOL.STATUS_CODE = SO.STATUS_CODE
AND SOL.STATUS_DATE = SO.STATUS_DATE
AND SO.REGION_CODE = SOS.REGION_CODE
AND SO.DOCUMENT_NUM = SOS.DOCUMENT_NUM
AND SOL.PRODUCT_CODE = PRI.PRODUCT_CODE
AND PRI.REGION_CODE = R.CORP_REGION_CODE
AND SO.REGION_CODE = R.DS_REGION_CODE
AND P.PRODUCT_MAJOR In ('STEREO','TELEVISION','VIDEO')
AND SOL.STATUS_CODE = 'D'
AND SOL.STATUS_DATE BETWEEN '01-JUN-09' AND '30-JUN-09'
AND SO.STORE_CODE NOT IN
('10','20','30','40','70','91','95','93','94','96','97','98','99',
'9V','9W','9X','9Y','9Z','8Z',
'8Y','92','CZ','FR','FS','FT','FZ','FY','FX','FW','FV','GZ','GY','GU','GW','GV','GX')
GROUP BY
P.RESPONSIBILITY, P.PRODUCT_MAJOR, P.PRODUCT_MINOR, P.PRODUCT_SERIES, P.PRODUCT_CATEGORY,
SO.REGION_CODE, SO.STORE_CODE, /*S.Short Name, */
S.Store_Name, SOL.PRODUCT_CODE,
PRI.REPLENISHMENT_TYPE, PRI.SUPPLIER_CODE,
SOL.SOLD_WITH_NIC, SOL.SUGGESTED_PRICE, PRI.INVOICE_COST,
SOL.FIFO_COST, SO.ORDER_TYPE_CODE, SOL.DOCUMENT_NUM,
SOS.SLSP_CD, '', '', SOL.PRICE_EXCEPTION_CODE,
SOL.AS_IS, SOL.STATUS_DATE
Explain Plan:
SELECT STATEMENT, GOAL = ALL_ROWS Cost=583 Cardinality=1 Bytes=253
HASH GROUP BY Cost=583 Cardinality=1 Bytes=253
FILTER
NESTED LOOPS Cost=583 Cardinality=1 Bytes=253
HASH JOIN OUTER Cost=582 Cardinality=1 Bytes=234
NESTED LOOPS
NESTED LOOPS Cost=571 Cardinality=1 Bytes=229
NESTED LOOPS Cost=571 Cardinality=1 Bytes=207
NESTED LOOPS Cost=569 Cardinality=2 Bytes=368
NESTED LOOPS Cost=568 Cardinality=2 Bytes=360
NESTED LOOPS Cost=556 Cardinality=3 Bytes=435
NESTED LOOPS Cost=178 Cardinality=4 Bytes=336
NESTED LOOPS Cost=7 Cardinality=1 Bytes=49
HASH JOIN Cost=7 Cardinality=1 Bytes=39
VIEW Object owner=CORP Object name=index$_join$_015 Cost=2 Cardinality=3 Bytes=57
HASH JOIN
INLIST ITERATOR
INDEX UNIQUE SCAN Object owner=CORP Object name=PRODMJR_PK Cost=0 Cardinality=3 Bytes=57
INDEX FAST FULL SCAN Object owner=CORP Object name=PRDMJR_PR_FK_I Cost=1 Cardinality=3 Bytes=57
VIEW Object owner=CORP Object name=index$_join$_016 Cost=4 Cardinality=37 Bytes=740
HASH JOIN
INLIST ITERATOR
INDEX RANGE SCAN Object owner=CORP Object name=PRDMNR1 Cost=3 Cardinality=37 Bytes=740
INDEX FAST FULL SCAN Object owner=CORP Object name=PRDMNR_PK Cost=4 Cardinality=37 Bytes=740
INDEX UNIQUE SCAN Object owner=CORP Object name=PRODMJR_PK Cost=0 Cardinality=1 Bytes=10
MAT_VIEW ACCESS BY INDEX ROWID Object owner=CORP Object name=PRODUCTS Cost=171 Cardinality=480 Bytes=16800
INDEX RANGE SCAN Object owner=CORP Object name=PRD2 Cost=3 Cardinality=681
TABLE ACCESS BY INDEX ROWID Object owner=DS Object name=SALES_ORDER_LINE Cost=556 Cardinality=1 Bytes=145
BITMAP CONVERSION TO ROWIDS
BITMAP INDEX SINGLE VALUE Object owner=DS Object name=SOL2
TABLE ACCESS BY INDEX ROWID Object owner=DS Object name=SALES_ORDER Cost=4 Cardinality=1 Bytes=35
INDEX RANGE SCAN Object owner=DS Object name=SO1 Cost=3 Cardinality=1
TABLE ACCESS BY INDEX ROWID Object owner=DS Object name=REGION_MAP Cost=1 Cardinality=1 Bytes=4
INDEX RANGE SCAN Object owner=DS Object name=REGCD Cost=0 Cardinality=1
MAT_VIEW ACCESS BY INDEX ROWID Object owner=CORP Object name=PRODUCT_REGIONAL_INFO Cost=2 Cardinality=1 Bytes=23
INDEX UNIQUE SCAN Object owner=CORP Object name=PRDRI_PK Cost=1 Cardinality=1
INDEX UNIQUE SCAN Object owner=CORP Object name=BI_STORE_INFO_PK Cost=0 Cardinality=1
MAT_VIEW ACCESS BY INDEX ROWID Object owner=CORP Object name=BI_STORE_INFO Cost=1 Cardinality=1 Bytes=22
VIEW Object owner=DS cost=11 Cardinality=342 Bytes=1710
HASH JOIN Cost=11 Cardinality=342 Bytes=7866
MAT_VIEW ACCESS FULL Object owner=CORP Object name=STORE_CORP Cost=5 Cardinality=429 Bytes=3003
NESTED LOOPS Cost=5 Cardinality=478 Bytes=7648
MAT_VIEW ACCESS FULL Object owner=CORP Object name=STORE_GROUP Cost=5 Cardinality=478 Bytes=5258
INDEX UNIQUE SCAN Object owner=CORP Object name=STORE_REGIONAL_INFO_PK Cost=0 Cardinality=1 Bytes=5
INDEX RANGE SCAN Object owner=DS Object name=SOS_PK Cost=2 Cardinality=1 Bytes=19
Regards,
BMPFirst thing that i notice in this query is you are Using Distinct as well as Group by.
Your group by will always give you distinct results ,then again why do you need the Distinct?
For example
WITH t AS
(SELECT 'clm1' col1, 'contract1' col2,10 value
FROM DUAL
UNION ALL
SELECT 'clm1' , 'contract1' ,10 value
FROM DUAL
UNION ALL
SELECT 'clm1', 'contract2',10
FROM DUAL
UNION ALL
SELECT 'clm2', 'contract1',10
FROM DUAL
UNION ALL
SELECT 'clm3', 'contract1',10
FROM DUAL
UNION ALL
SELECT 'clm4', 'contract2',10
FROM DUAL)
SELECT distinct col1,col2,sum(value) from t
group by col1,col2Is always same as
WITH t AS
(SELECT 'clm1' col1, 'contract1' col2,10 value
FROM DUAL
UNION ALL
SELECT 'clm1' , 'contract1' ,10 value
FROM DUAL
UNION ALL
SELECT 'clm1', 'contract2',10
FROM DUAL
UNION ALL
SELECT 'clm2', 'contract1',10
FROM DUAL
UNION ALL
SELECT 'clm3', 'contract1',10
FROM DUAL
UNION ALL
SELECT 'clm4', 'contract2',10
FROM DUAL)
SELECT col1,col2,sum(value) from t
group by col1,col2And also
AND SOL.STATUS_DATE BETWEEN '01-JUN-09' AND '30-JUN-09'It would be best to use a to_date when hard coding your dates.
Edited by: user5495111 on Aug 6, 2009 1:32 PM -
EJB-QL--- Complex Query --- Two Entites
hi
Can i write Complex Query in EJB-QL
between two entities...
have any buddy wrote the same....
i badly require the same...
bye
RAJRaj -- OC4J will support EJB-QL soon but not yet. You can look at
Re: Data Integrity
for more details.
Now, as for complex query, you may still be able to do this in the current version through the orion-ejb-jar.xml. You can
include complex SQL there in the finder methods.
What exactly do you need to do?
later -- Jeff
hi
Can i write Complex Query in EJB-QL
between two entities...
have any buddy wrote the same....
i badly require the same...
bye
RAJ
Maybe you are looking for
-
Is there a better way to do this? Interactive graphics on a PDF
Hello Part of a PDF form I am planning requires the user to place several marks on a series of dots. I have partially achieved this using check boxes and many hidden objects. http://www.hoodoomayhem.com/example/Example.pdf focus on the small dots in
-
My H.264 MPEG4 files turn into -1.MOV files after saving and viewing file
info the in the Metrics inspector File Info box of the movie page. Some people I send video to get their email at their work and are not always able to view the files even if they are less then 1MB, and so not sure if the -1.mov makes it too big (whi
-
Do Web Intelligence Support Linked Universes in BO XI 3.1 sp3
Hi Folks! I know WebI in XIR2 doesnt support Linked Universes. So we used to build reports in Deski as we need to generate reports on liniked universe.(one core and three derived) now we are upgrading the version to Xi3.1 Sp3 and i am curious to know
-
Planned Activity column in overview screen of KP26 is disabled
Hi, I am getting Planned Activity column disabled in the overview screen of KP26. So, unable to enter plan data. Please help. Thanks Manish
-
How do i transfer all my pics from Picasa 3 to Photoshop Elements 13
I'm sure their all saves in My Pics on my HDD so perhaps just pull them all into 13. I just want to make sure I have all my pics and videos off of Picasa 3. Side note, does PE 13 allows me to get rid of of multiple copies of the same pics. Thanks