Union Queries
What are the different types of union queries? I want to union two queries to pull only the records that are different in one of the queries. Is there a union query that does this? Thanks.
UNION Statement
Combine data from one or more SELECT statements.
In Oracle 8i (and above) the UNION command has been largely replaced by the new Analytic Features
Syntax:
SELECT command [{UNION | UNION ALL | INTERSECT | MINUS} SELECT command]
key:
UNION - Combine the unique rows returned by 2 SELECT statements
UNION ALL - Combine the rows returned by 2 SELECT statements (including all duplicates)
INTERSECT - Return only those rows that are in both SELECT statements
MINUS - Return the rows that are in the first SELECT but not the second
To combine more than two SELECTs simply nest the expressions
SELECT expr1 UNION (SELECT expr2 UNION SELECT expr3)
Similar Messages
-
Using SUM BY to limit result of 3 union queries (11g)
Hey guys,
First time posting here (btw, I've tried changing my handle name via edit profile here to no success! Ugh!).
I need to modify a report that's built off of 3 union queries. Here's a simplified table version of the union result:
Label
Year
Category
Score
Ct
A
2005
1a
4.0
1
A
2005
2b
3.5
1
A
2005
3c
2.5
1
B
2006
1a
2.8
1
B
2006
2b
4.0
1
Ct is a calculated item where I did a CASE on a field just to get a count of 1 on this column. I need to limit this result where per label, per year, there are 3 categories. So, looking at above table, Label A rows will be the only set returned. To "hopefully" get 3 under the Ct column where there are 3 categories per year, per label, I have tried "SUM(Ct by Year)" but it didn't give the correct result. I have also tried "SUM(SUM(Ct by Year) by Label)" and that didn't work either (not that I expected it to work). I also messed around with GROUP BY to no success either.
Has anyone run into something like this? Any input/tip is appreciated. THANKS!!
Twiggy99Are you using outer query to get the same?
btw: What is when you use count instead of sum? -
Text index for UNION queries.
Hi All,
Can anyone please help me in tuning search query mentioned below
select id from usr1.organizations where lower(ID_official_name) like 'technology%'
union
select id from usr1.organizations where lower(ID_OFFICIAL_NORM_NAME) like 'technology%'
union
select id from usr1.organizations where lower(ID_OFFICIAL_ENG_NAME) like 'technology%'
union
select id from usr1.organizations where lower(ID_OFFICIAL_ENG_NORM_NAME) like 'technology%'
union
select id from usr1.organizations where lower(ID_OFFICIAL_TRANS_NAME) like 'technology%'
union
select id from usr1.ID_ALIAS_NAMEs where lower(ID_ALIAS_NAME) like 'technology%'
union
select id from usr1.ID_ALIAS_NAMEs where lower(ID_ALIAS_NORM_NAME) like 'technology%'
union
select id from usr1.ID_ALIAS_NAMEs where lower(ID_ALIAS_ENG_NAME) like 'technology%'
union
select id from usr1.ID_ALIAS_NAMEs where lower(ID_ALIAS_ENG_NORM_NAME) like 'technology%'
union
select id from usr1.ID_ALIAS_NAMEs where lower(ID_ALIAS_TRANS_NAME) like 'technology%'
union
select id from usr1.ID_DOING_BUSINESS_AS_NAMES where lower(ID_dba_name) like 'technology%'
union
select id from usr1.ID_DOING_BUSINESS_AS_NAMES where lower(ID_DBA_NORM_NAME) like 'technology%'
union
select id from usr1.ID_DOING_BUSINESS_AS_NAMES where lower(ID_DBA_ENG_NAME) like 'technology%'
union
select id from usr1.ID_DOING_BUSINESS_AS_NAMES where lower(ID_DBA_ENG_NORM_NAME) like 'technology%'
union
select id from usr1.ID_DOING_BUSINESS_AS_NAMES where lower(ID_DBA_TRANS_NAME) like 'technology%'
union
select id from usr1.ID_FKA_NAMES where lower(ID_fka_name) like 'technology%'
union
select id from usr1.ID_FKA_NAMES where lower(ID_fkA_NORM_NAME) like 'technology%'
union
select id from usr1.ID_FKA_NAMES where lower(ID_fkA_ENG_NAME) like 'technology%'
union
select id from usr1.ID_FKA_NAMES where lower(ID_fkA_ENG_NORM_NAME) like 'technology%'
union
select id from usr1.ID_FKA_NAMES where lower(ID_fkA_TRANS_NAME) like 'technology%'Here organizations table is the parent table having primary key on id column, and rest all tables are children tables having foreign key on id column referencing to primary key id column in organizations table.
Planning to implement multiple column(Userdatastore) text index on dummy column appended to organizations table. And write triggers on other child tables to trigger the sync for Text index.
But not sure whether we can rewrite this above sql query by replacing union into joins, not sure why developer has not done so.
Can anyone please help me in creating text index for this sql. I do not want to approach cartesian joins as these are having parent-child relationship.
Oracle Version: 10.2.0.4
Please let me know if you need more information1 .As text index is created in parent table on id column, can we somehow search only from particular columns(Parent or child) by using user_datastore and tags for sectioning it?
Below are the sql which i need to make use of text index
select m.id from id_ALIAS_NAMEs an
join organizations m on(m.id=an.id)
where lower(ID_ALIAS_NAME) like 'technology%' and m.id_data_provider<100;
select M.id,ID_ALIAS_NAME,'ID_ALIAS_NAME' AS NAMETYPE
from id_alias_names an JOIN organizations m ON m.id=an.id
where id_data_provider<100 AND coalesce(m.ID_COUNTRY_OF_DOMICILE,m.ID_COUNTRY_OF_INCORPORATION)='US'
AND LOWER(ID_ALIAS_NAME) like LOWER('TECHNOLOGY%')
and F_GetFirstWord(ORG_ALIAS_NAME)='TECHNOLOGY'
The text index must be created on a text column, not a numeric id column. It is common to create it on a dummy column. You can name that column anything you like instead of dummy, like search_columns or some such thing. You can add tags in your procedure, so that your resulting virtual column is like xml data. You can then create a section group, so that you can search within each of those tags. In the example below, I used ctxsys.auto_section_group because it is the simplest to create, but you may get better performance by using another type of section group and naming each individual tag.
SCOTT@orcl_11gR2> -- tables you already have:
SCOTT@orcl_11gR2> create table organizations
2 (id number primary key,
3 id_official_name varchar2 (10),
4 id_official_norm_name varchar2 (10),
5 id_official_eng_name varchar2 (10),
6 id_official_trans_name varchar2 (10),
7 id_data_provider number,
8 id_country_of_domicile varchar2 (10),
9 id_country_of_incorporation varchar2 (10))
10 /
Table created.
SCOTT@orcl_11gR2> create table id_alias_names
2 (id number references organizations (id),
3 id_alias_name varchar2 (10),
4 id_alias_norm_name varchar2 (10),
5 id_alias_eng_name varchar2 (10),
6 id_alias_trans_name varchar2 (10))
7 /
Table created.
SCOTT@orcl_11gR2> create table id_doing_business_as_names
2 (id number references organizations (id),
3 id_dba_name varchar2 (10),
4 id_dba_norm_name varchar2 (10),
5 id_dba_eng_name varchar2 (10),
6 id_dba_trans_name varchar2 (10))
7 /
Table created.
SCOTT@orcl_11gR2> create table id_fka_names
2 (id number references organizations (id),
3 id_fka_name varchar2 (10),
4 id_fka_norm_name varchar2 (10),
5 id_fka_eng_name varchar2 (10),
6 id_fka_trans_name varchar2 (10))
7 /
Table created.
SCOTT@orcl_11gR2> -- test data:
SCOTT@orcl_11gR2> insert all
2 into organizations values (1, 'test', 'name2', 'name3', 'name4', 99, 'US', null)
3 into organizations values (2, 'name1', 'name2', 'name3', 'name4', 99, null, 'US')
4 into organizations values (3, 'name1', 'name2', 'name3', 'name4', 99, null, null)
5 into organizations values (4, 'name1', 'name2', 'name3', 'name4', 101, 'US', 'US')
6 into organizations values (5, 'technology', 'technology', 'technology', 'technology', 99, 'US', 'US')
7 select * from dual
8 /
5 rows created.
SCOTT@orcl_11gR2> insert all
2 into id_alias_names values (1, 'technology', 'name6', 'name7', 'name8')
3 into id_alias_names values (2, 'technology', 'test', 'name7', 'name8')
4 into id_alias_names values (3, 'technology', 'name6', 'name7', 'name8')
5 into id_alias_names values (4, 'technology', 'name6', 'name7', 'name8')
6 into id_alias_names values (5, 'name5', 'technology', 'technology', 'technology')
7 select * from dual
8 /
5 rows created.
SCOTT@orcl_11gR2> insert all
2 into id_doing_business_as_names values (1, 'name9', 'name10', 'name11', 'name12')
3 into id_doing_business_as_names values (2, 'name9', 'name10', 'name11', 'name12')
4 into id_doing_business_as_names values (3, 'name9', 'name10', 'test', 'name12')
5 into id_doing_business_as_names values (4, 'name9', 'name10', 'name11', 'name12')
6 into id_doing_business_as_names values (5, 'technology', 'technology', 'technology', 'technology')
7 select * from dual
8 /
5 rows created.
SCOTT@orcl_11gR2> insert all
2 into id_fka_names values (1, 'name13', 'name14', 'name15', 'name16')
3 into id_fka_names values (2, 'name13', 'name14', 'name15', 'name16')
4 into id_fka_names values (3, 'name13', 'name14', 'name15', 'name16')
5 into id_fka_names values (4, 'name13', 'name14', 'name15', 'test')
6 into id_fka_names values (5, 'technology', 'technology', 'technology', 'technology')
7 select * from dual
8 /
5 rows created.
SCOTT@orcl_11gR2> -- revised procedure to join tables with tags:
SCOTT@orcl_11gR2> create or replace procedure your_proc
2 (p_rowid in rowid,
3 p_clob in out nocopy clob)
4 as
5 begin
6 for r1 in
7 (select id,
8 '<id_official_name>'
9 || id_official_name
10 || '</id_official_name><id_official_norm_name>'
11 || id_official_norm_name
12 || '</id_official_norm_name><id_official_eng_name>'
13 || id_official_eng_name
14 || '</id_official_eng_name><id_official_trans_name>'
15 || id_official_trans_name
16 || '</id_official_trans_name>' as tags_and_values
17 from organizations
18 where rowid = p_rowid)
19 loop
20 dbms_lob.writeappend
21 (p_clob, length (r1.tags_and_values), r1.tags_and_values);
22 for r2 in
23 (select '<id_alias_name>'
24 || id_alias_name
25 || '</id_alias_name><id_alias_norm_name>'
26 || id_alias_norm_name
27 || '</id_alias_norm_name><id_alias_eng_name>'
28 || id_alias_eng_name
29 || '</id_alias_eng_name><id_alias_trans_name>'
30 || id_alias_trans_name
31 || '</id_alias_trans_name>' as tags_and_values
32 from id_alias_names
33 where id = r1.id)
34 loop
35 dbms_lob.writeappend
36 (p_clob, length (r2.tags_and_values), r2.tags_and_values);
37 end loop;
38 for r3 in
39 (select '<id_dba_name>'
40 || id_dba_name
41 || '</id_dba_name><id_dba_norm_name>'
42 || id_dba_norm_name
43 || '</id_dba_norm_name><id_dba_eng_name>'
44 || id_dba_eng_name
45 || '</id_dba_eng_name><id_dba_trans_name>'
46 || id_dba_trans_name
47 || '</id_dba_trans_name>' as tags_and_values
48 from id_doing_business_as_names
49 where id = r1.id)
50 loop
51 dbms_lob.writeappend
52 (p_clob, length (r3.tags_and_values), r3.tags_and_values);
53 end loop;
54 for r4 in
55 (select '<id_fka_name>'
56 || id_fka_name
57 || '</id_fka_name><id_fka_norm_name>'
58 || id_fka_norm_name
59 || '</id_fka_norm_name><id_fka_eng_name>'
60 || id_fka_eng_name
61 || '</id_fka_eng_name><id_fka_trans_name>'
62 || id_fka_trans_name
63 || '</id_fka_trans_name>' as tags_and_values
64 from id_fka_names
65 where id = r1.id)
66 loop
67 dbms_lob.writeappend
68 (p_clob, length (r4.tags_and_values), r4.tags_and_values);
69 end loop;
70 end loop;
71 end your_proc;
72 /
Procedure created.
SCOTT@orcl_11gR2> show errors
No errors.
SCOTT@orcl_11gR2> -- examples of virtual columns that revised procedure returns:
SCOTT@orcl_11gR2> declare
2 v_clob clob;
3 begin
4 for r in
5 (select rowid, id
6 from organizations)
7 loop
8 dbms_lob.createtemporary (v_clob, true);
9 your_proc (r.rowid, v_clob);
10 dbms_output.put_line (r.id);
11 dbms_output.put_line (v_clob);
12 dbms_lob.freetemporary (v_clob);
13 end loop;
14 end;
15 /
1
<id_official_name>test</id_official_name><id_official_norm_name>name2</id_official_norm_name><id_official_eng_name>name3
</id_official_eng_name><id_official_trans_name>name4</id_official_trans_name><id_alias_name>technology</id_alias_name><i
d_alias_norm_name>name6</id_alias_norm_name><id_alias_eng_name>name7</id_alias_eng_name><id_alias_trans_name>name8</id_a
lias_trans_name><id_dba_name>name9</id_dba_name><id_dba_norm_name>name10</id_dba_norm_name><id_dba_eng_name>name11</id_d
ba_eng_name><id_dba_trans_name>name12</id_dba_trans_name><id_fka_name>name13</id_fka_name><id_fka_norm_name>name14</id_f
ka_norm_name><id_fka_eng_name>name15</id_fka_eng_name><id_fka_trans_name>name16</id_fka_trans_name>
2
<id_official_name>name1</id_official_name><id_official_norm_name>name2</id_official_norm_name><id_official_eng_name>name
3</id_official_eng_name><id_official_trans_name>name4</id_official_trans_name><id_alias_name>technology</id_alias_name><
id_alias_norm_name>test</id_alias_norm_name><id_alias_eng_name>name7</id_alias_eng_name><id_alias_trans_name>name8</id_a
lias_trans_name><id_dba_name>name9</id_dba_name><id_dba_norm_name>name10</id_dba_norm_name><id_dba_eng_name>name11</id_d
ba_eng_name><id_dba_trans_name>name12</id_dba_trans_name><id_fka_name>name13</id_fka_name><id_fka_norm_name>name14</id_f
ka_norm_name><id_fka_eng_name>name15</id_fka_eng_name><id_fka_trans_name>name16</id_fka_trans_name>
3
<id_official_name>name1</id_official_name><id_official_norm_name>name2</id_official_norm_name><id_official_eng_name>name
3</id_official_eng_name><id_official_trans_name>name4</id_official_trans_name><id_alias_name>technology</id_alias_name><
id_alias_norm_name>name6</id_alias_norm_name><id_alias_eng_name>name7</id_alias_eng_name><id_alias_trans_name>name8</id_
alias_trans_name><id_dba_name>name9</id_dba_name><id_dba_norm_name>name10</id_dba_norm_name><id_dba_eng_name>test</id_db
a_eng_name><id_dba_trans_name>name12</id_dba_trans_name><id_fka_name>name13</id_fka_name><id_fka_norm_name>name14</id_fk
a_norm_name><id_fka_eng_name>name15</id_fka_eng_name><id_fka_trans_name>name16</id_fka_trans_name>
4
<id_official_name>name1</id_official_name><id_official_norm_name>name2</id_official_norm_name><id_official_eng_name>name
3</id_official_eng_name><id_official_trans_name>name4</id_official_trans_name><id_alias_name>technology</id_alias_name><
id_alias_norm_name>name6</id_alias_norm_name><id_alias_eng_name>name7</id_alias_eng_name><id_alias_trans_name>name8</id_
alias_trans_name><id_dba_name>name9</id_dba_name><id_dba_norm_name>name10</id_dba_norm_name><id_dba_eng_name>name11</id_
dba_eng_name><id_dba_trans_name>name12</id_dba_trans_name><id_fka_name>name13</id_fka_name><id_fka_norm_name>name14</id_
fka_norm_name><id_fka_eng_name>name15</id_fka_eng_name><id_fka_trans_name>test</id_fka_trans_name>
5
<id_official_name>technology</id_official_name><id_official_norm_name>technology</id_official_norm_name><id_official_eng
_name>technology</id_official_eng_name><id_official_trans_name>technology</id_official_trans_name><id_alias_name>name5</
id_alias_name><id_alias_norm_name>technology</id_alias_norm_name><id_alias_eng_name>technology</id_alias_eng_name><id_al
ias_trans_name>technology</id_alias_trans_name><id_dba_name>technology</id_dba_name><id_dba_norm_name>technology</id_dba
_norm_name><id_dba_eng_name>technology</id_dba_eng_name><id_dba_trans_name>technology</id_dba_trans_name><id_fka_name>te
chnology</id_fka_name><id_fka_norm_name>technology</id_fka_norm_name><id_fka_eng_name>technology</id_fka_eng_name><id_fk
a_trans_name>technology</id_fka_trans_name>
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> -- user_datastore:
SCOTT@orcl_11gR2> begin
2 ctx_ddl.create_preference ('your_datastore', 'user_datastore');
3 ctx_ddl.set_attribute ('your_datastore', 'procedure', 'your_proc');
4 end;
5 /
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> -- dummy column:
SCOTT@orcl_11gR2> alter table organizations add (dummy varchar2(1))
2 /
Table altered.
SCOTT@orcl_11gR2> -- index with auto_section_group,
SCOTT@orcl_11gR2> -- must be on a text column, like dummy, not numeric id column:
SCOTT@orcl_11gR2> create index your_index
2 on organizations (dummy)
3 indextype is ctxsys.context
4 parameters
5 ('datastore your_datastore
6 section group ctxsys.auto_section_group')
7 /
Index created.
SCOTT@orcl_11gR2> -- example queries:
SCOTT@orcl_11gR2> select id
2 from organizations
3 where contains (dummy, 'technology within id_alias_name') > 0
4 and id_data_provider < 100
5 /
ID
1
2
3
3 rows selected.
SCOTT@orcl_11gR2> select m.id, an.id_alias_name, 'ID_ALIAS_NAME' as nametype
2 from id_alias_names an join organizations m on m.id = an.id
3 where contains (m.dummy, 'technology within id_alias_name') > 0
4 and m.id_data_provider < 100
5 and coalesce (m.id_country_of_domicile, m.id_country_of_incorporation) = 'US'
6 /
ID ID_ALIAS_N NAMETYPE
1 technology ID_ALIAS_NAME
2 technology ID_ALIAS_NAME
2 rows selected.
SCOTT@orcl_11gR2> -
View Objects with Union Queries--trouble with primary keys
Hi,
I'm working with JDev 11.1.1.3 and am trying to do a couple of things (without success--yet). I am trying to create a master-detail relationship that displays the existing data in a set of 3 tables and later I will be creating forms for inserting and updating.
The table structure is like this:
Table: Member
Field: MemberIdx (PK)
Field: Data
Table: CfgPartner
Field: MemberIdx (PK)
Field: DocType (PK)
Field: DocRevision (PK)
Field: OtherData
Table: CfgB2BPartner
Field: MemberIdx (PK)
Field: DocType (PK)
Field: DocRevision (PK)
Field: B2BData
I have a View Object for the master table (Member). And I have created a 2nd View Object that is a union of the other two tables. There is some data in CfgPartner that doesn't have a matching record in CfgB2BPartner and vice versa. My thinking is that the two tables are related and I would like them to display within the same table on the ADF page.
My 2nd View Object has this query:
SELECT CfgPartner.MEMBERIDX,
CfgPartner.DOCTYPE,
CfgPartner.DOCREVISION,
CfgPartner.OTHERDATA,
CfgB2bpartner.B2BDATA
FROM CFG_PARTNER CfgPartner, CFG_B2BPARTNER CfgB2bpartner
WHERE CfgPartner.MEMBERIDX=CfgB2bpartner.MEMBERIDX(+)
and CfgPartner.DOCTYPE=CfgB2bpartner.DOCTYPE(+)
and CfgPartner.DOCREVISION=CfgB2bpartner.DOCREVISION(+)
UNION
SELECT CfgB2bpartner.MEMBERIDX AS MEMBERIDX1,
CfgB2bpartner.DOCTYPE AS DOCTYPE1,
CfgB2bpartner.DOCREVISION AS DOCREVISION1,
CfgPartner.OTHERDATA,
CfgB2bpartner.B2BDATA
FROM CFG_PARTNER CfgPartner, CFG_B2BPARTNER CfgB2bpartner
WHERE CfgB2bpartner.MEMBERIDX=CfgPartner.MEMBERIDX(+)
and CfgB2bpartner.DOCTYPE=CfgPartner.DOCTYPE(+)
and CfgB2bpartner.DOCREVISION=CfgPartner.DOCREVISION(+)
ORDER BY MEMBERIDX,DOCTYPE,DOCREVISION
The query is valid and runs fine in the database. However, the error I'm getting in the app module makes it sound like I don't have my primary keys set up correctly. Here is the error: (oracle.jbo.PersistenceException) JBO-26028: View object testCfgPtnrCfgB2BPtnr does not include a primary key attribute Memberidx of entity base CfgB2bpartner.
In the View Object it shows the attributes Memberidx, Doctype, Docrevision, Memberidx1, Doctype1, and Docrevision1 all as key attributes. The only strange thing I see is the Entity Usage for Memberidx1, Doctype1, and Docrevision1 are all empty and the info column says "Transient".
Any help would be appreciated.
-SteveHi,
I think that to achieve this you need to suround it with another "select from" statement and create alias for the columns
I created a test with the departments table (assuming that they are two different tables with different attributes) just to see that it works.
SELECT DEPID1,DEPID2,DEPNAME1,DEPNAME2
FROM(
SELECT Departments1.DEPARTMENT_ID AS DEPID1,
NULL as DEPID2,
Departments1.DEPARTMENT_NAME AS DEPNAME1,
NULL as DEPNAME2
FROM DEPARTMENTS Departments1
UNION
SELECT Departments2.DEPARTMENT_ID AS DEPID2,
NULL as DEPID1,
Departments2.DEPARTMENT_NAME AS DEPNAME2,
NULL as DEPNAME1
FROM DEPARTMENTS Departments2)The resulting VO will have 4 attributes and you can set the primary key to be (DEPID1,DEPID2)
If your 2 tables have common columns then these columns can have the same alias
If you have any problems let me know :)
Gabriel. -
The below query returns two rows. How do I get the same in one row?
SELECT A, B, C
FROM (
SELECT
A, B, C
FROM tableX
UNION
SELECT
A, B, C
FROM tableY
SELECT
A, B, C
FROM tableX
UNION
SELECT
A, B, C
FROM tableY
);user10744988 wrote:
The below query returns two rows. How do I get the same in one row?
SELECT A, B, C
FROM (
SELECT
A, B, C
FROM tableX
UNION
SELECT
A, B, C
FROM tableY
SELECT
A, B, C
FROM tableX
UNION
SELECT
A, B, C
FROM tableY
);posting invalid SQL (above) is a poor way to start.
How do I ask a question on the forums?
SQL and PL/SQL FAQ
how do we know what you expect/desire to be contained in the single row?
Handle: user10744988
Status Level: Newbie
Registered: Dec 26, 2008
Total Posts: 76
Total Questions: 34 (24 unresolved)
why so many unanswered questions? -
How to make the sql with unions to run faster
I have the following sql which takes long time to run in sqlplus. This is in oracle 10, can I use hints to speed up the process. Union all brings all rows, but I want to eliminate the duplicates.
select A.EMPLID,S.OPRID,A.LASTUPDDTTM,A.EMPL_RCD_NBR,A.LAST_NAME,A.FIRST_NAME,A.DEPTID,B.COMPANY,B.PAYGROUP,B.PAY_END_DT,B.OFF_CYCLE,
B.ERNCD_REG_HRS,B.REG_HRS,0,B.REG_HRLY_EARNS
from PS_EMPLOYEES A,PS_PAY_EARNINGS B,PS_SCRTY_TBL_DEPT S,PSTREENODE T
where S.ACCESS_CD = 'Y' and T.SETID = ' ' and T.TREE_NAME = 'DEPT_SECURITY'
and T.EFFDT = S.TREE_EFFDT and T.TREE_NODE = A.DEPTID and T.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END
and not exists (select 'X' from PS_SCRTY_TBL_DEPT S1
where S.OPRID = S1.OPRID
and S.TREE_NODE_NUM <> S1.TREE_NODE_NUM
and T.TREE_NODE_NUM between S1.TREE_NODE_NUM
and S1.TREE_NODE_NUM_END
and S1.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END)
and B.EMPLID = A.EMPLID and B.EMPL_RCD_NBR = A.EMPL_RCD_NBR
and B.SINGLE_CHECK_USE IN ('C', 'N') and (B.REG_HRS<>0 or B.REG_HRLY_EARNS<>0)
and B.PAY_LINE_STATUS in ('C','F')
union
select A.EMPLID,S.OPRID,A.LASTUPDDTTM,A.EMPL_RCD_NBR,A.LAST_NAME,A.FIRST_NAME,A.DEPTID,B.COMPANY,B.PAYGROUP,B.PAY_END_DT,B.OFF_CYCLE,
B.ERNCD_REG_HRS,B.REG_HRS,0,B.REG_EARNS
from PS_EMPLOYEES A,PS_PAY_EARNINGS B,PS_SCRTY_TBL_DEPT S,PSTREENODE T
where S.ACCESS_CD = 'Y' and T.SETID = ' ' and T.TREE_NAME = 'DEPT_SECURITY'
and T.EFFDT = S.TREE_EFFDT and T.TREE_NODE = A.DEPTID and T.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END
and not exists (select 'X' from PS_SCRTY_TBL_DEPT S1
where S.OPRID = S1.OPRID
and S.TREE_NODE_NUM <> S1.TREE_NODE_NUM
and T.TREE_NODE_NUM between S1.TREE_NODE_NUM
and S1.TREE_NODE_NUM_END
and S1.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END)
and B.EMPLID = A.EMPLID and B.EMPL_RCD_NBR = A.EMPL_RCD_NBR
and B.SINGLE_CHECK_USE IN ('C', 'N') and (B.REG_HRS<>0 or B.REG_HRLY_EARNS<>0)
and B.PAY_LINE_STATUS in ('C','F')
union
select A.EMPLID,S.OPRID,A.LASTUPDDTTM,A.EMPL_RCD_NBR,A.LAST_NAME,A.FIRST_NAME,A.DEPTID,B.COMPANY,B.PAYGROUP,B.PAY_END_DT,B.OFF_CYCLE,
B.ERNCD_OT_HRS,B.OT_HRS,0,B.OT_HRLY_EARNS
from PS_EMPLOYEES A,PS_PAY_EARNINGS B,PS_SCRTY_TBL_DEPT S,PSTREENODE T
where S.ACCESS_CD = 'Y' and T.SETID = ' ' and T.TREE_NAME = 'DEPT_SECURITY'
and T.EFFDT = S.TREE_EFFDT and T.TREE_NODE = A.DEPTID and T.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END
and not exists (select 'X' from PS_SCRTY_TBL_DEPT S1
where S.OPRID = S1.OPRID
and S.TREE_NODE_NUM <> S1.TREE_NODE_NUM
and T.TREE_NODE_NUM between S1.TREE_NODE_NUM
and S1.TREE_NODE_NUM_END
and S1.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END)
and B.EMPLID = A.EMPLID and B.EMPL_RCD_NBR = A.EMPL_RCD_NBR
and B.SINGLE_CHECK_USE IN ('C', 'N')
and (B.OT_HRS<>0 or B.OT_HRLY_EARNS<>0)
union
select
A.EMPLID,S.OPRID,A.LASTUPDDTTM,A.EMPL_RCD_NBR,A.LAST_NAME,A.FIRST_NAME,A.DEPTID,B.COMPANY,B.PAYGROUP,B.PAY_END_DT,B.OFF_CYCLE,
C.ERNCD,C.OTH_HRS,C.OTH_PAY,C.OTH_EARNS
from PS_EMPLOYEES A,PS_PAY_EARNINGS B,PS_PAY_OTH_EARNS C,PS_SCRTY_TBL_DEPT S,PSTREENODE T
where S.ACCESS_CD = 'Y' and T.SETID = ' ' and T.TREE_NAME = 'DEPT_SECURITY'
and T.EFFDT = S.TREE_EFFDT and T.TREE_NODE = A.DEPTID and T.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END
and not exists (select 'X' from PS_SCRTY_TBL_DEPT S1
where S.OPRID = S1.OPRID
and S.TREE_NODE_NUM <> S1.TREE_NODE_NUM
and T.TREE_NODE_NUM between S1.TREE_NODE_NUM
and S1.TREE_NODE_NUM_END
and S1.TREE_NODE_NUM between S.TREE_NODE_NUM
and S.TREE_NODE_NUM_END)
and B.EMPLID = A.EMPLID and B.EMPL_RCD_NBR = A.EMPL_RCD_NBR
and C.COMPANY = B.COMPANY and C.PAYGROUP = B.PAYGROUP
and C.PAY_END_DT = B.PAY_END_DT and C.OFF_CYCLE = B.OFF_CYCLE
and C.PAGE_NBR = B.PAGE_NBR and C.LINE_NBR = B.LINE_NBR
and C.ADDL_NBR = B.ADDL_NBR and B.SINGLE_CHECK_USE IN ('C', 'N')
and (C.OTH_HRS<>0 or C.OTH_PAY<>0 or C.OTH_EARNS<>0)
and B.PAY_LINE_STATUS in ('C','F')UNION will eliminate the duplicates. If you are seeing rows that look like duplicates, there must be something different about them that you are missing.
If there is some set of rows that is common to all of the UNION queries and expensive to retrieve, you might try subquery factoring, e.g:
WITH common_set AS
( SELECT somecols
FROM sometab x, othertab y
WHERE y.key = x.key
AND etc )
SELECT a,b,c
FROM common_set c, table1 t
WHERE t.key = c.key
UNION
SELECT a,b,c
FROM common_set c, table2 t
WHERE t.key = c.key
UNION
SELECT a,b,c
FROM common_set c, table2 t
WHERE t.key = c.keyThe usual advice applies for tuning requests applies though:
<ul><li>{thread:id=863295}</li>
<li>{thread:id=501834}</li>
<li>Troubleshooting Bad Execution Plans</li>
<li>Writing Good SQL</li></ul> -
I have a report (say Report1) where five queries are UNIONed together to give a result set. I have a navigation on one particular column (say Customer ID) for navigating to a different report (Report2) where Customer ID IS PROMPTED in Report2. But when I click on Customer ID = A11 in Report1, it takes me to Report2 but shows all rows whereas I expect only the rows corresponding to Customer ID A11. To verify the behavior, I created another report (Report3) wherein I had five UNION queries and this feature works fine in the new report. Report1 and Report3 are similar in design but Report3 is much smaller and simpler than Report1. Is there anything I can do to make this thing work in the report. It would take a lot of time recreate the report from scratch. Thanks.
I figured it out. Navigation does not work in Pivot Table. So, if you click on a customer name in the Pivot Table view, and the customer name is "Is Prompted" in the target report, the filter value will not be applied in the target report.
-
Crystal 8.5! Set table locations at run time to queries
Hopefully some people still remember version 8.5...
I have a number of reports which all work from a single database, this can be either Access or SQL Server, I'm currently testing on Access. I would like to use the same reports but print them for multiple databases, all of which have the same schema. To do this I'm creating UNION queries in one of the databases and I now want to change the location of the tables in the report to use these union queries instead.
For example, say the report uses table "Customer" in db1 but I have also have db2 and db3 with the same table, I'm enumerating all fields used in the report and creating a union in db1 something like:
SELECT field1, field2 FROM Customer IN 'db1.mdb'
UNION SELECT field1, field2 FROM Customer IN 'db2.mdb'
UNION SELECT field1, field2 FROM Customer IN 'db3.mdb'
Now I've tested this in Crystal Reports itself, i.e. setting the location to the new tables, and it works OK. I'm having to use an OLEDB connection otherwise the links get removed. When I try to set the location in code I just get no data on the report even though there is data available.
In code I'm going through all tables (and all tables in all sub reports) and I've tried setting the Location property to the name of the union, I've tried SetTableLocation "<path to db>", "<union name>" and I've tried both using SetLogOnInfo "<path to db>" as well.
I'm thinking perhaps converting the report to active data and plugging in an ADO recordset could be a solution but I'm not sure how feasible that is from code (i.e. converting the database driver from either pdsoledb.dll or pdbdao.dll to pdsmon.dll and creating a ttx on the fly...).
Any help much appreciated.Hi,
SetTableLocation should work but you need to make sure you call it for each of the tables in the report or in this case the Union.
Just like in the report designer when you set the location you need to point to the table you want to change. Even though you get the prompt asking to set the same location for all the tables, it's doing the same thing for you.
Hope this helps,
Brian -
Can we change filter column values in a union query using Dashboard prompt
Hi,
I have a requirement in which have to draw a chart report for last six months?.
When i query against database, my query got different where clause for open month and close month.
Say for july month bar, it got close month as july and open month as july, june, may. Like this, for june month bar, it has to have close month as june and open month as june, may, april. like this, i created six union queries using repository variable.
Want to give control using dashboard prompt for close month and open month?
my query look like this.
select close month1, fact1 from table1
where close month = july and open month in (july, june, may)
UNION
select close month2, fact2 from table1
where close month = june and open month in (june, may, april)
UNION
select close month3, fact3 from table1
where close month = may and open month in (may, april, march)
UNION
select close month4, fact4 from table1
where close month = april and open month in (april, march, february)
UNION
select close month5, fact5 from table1
where close month = march and open month in (march, february, january)
UNION
select close month6, fact6 from table1
where close month = february and open month in (february, january, december)
Welcome your suggestions on this?.
ThanksHi Karol,
Yes the prompt is working fine when i put this following method under the "Button" Component.
APPLICATION.openPromptDialog(800, 600);
Somehow the when i use the "Input Field" and use the "Button" Component and write this following logic inside it i don't see the prompt is not taking the values what i am entering in input field i assume that its issue with data-source not getting refreshed.
Variable=INPUTFIELD_1.getValue();
APPLICATION.setVariableValue("PercentageIncrease",Variable);
Thanks,
Kumar -
Using Queries in Crystal Reports
Hi all,
I know that creating a report in Crystal Reports is essentially creating a query, but I wanted to know if anyone knew of any ways to develop queries using the Query Generator in B1 and then use that query for a report in Crystal, possibly referencing or copying it?
Also, if anyone is familiar with union queries or sub queries, could you explain their more common uses?
Thanks for the help,
ToddHi Todd Linscott,
We have using this type of query in SAP in Query Generator
SELECT T0.[DocNum] as 'Invoice No.', T0.[DOCDATE] as 'Invoice Date', T0.[CardName] as 'Customer Name' ,
FROM OINV WHERE T0.[DOCDATE] >=[%0] AND T0.[DOCDATE]<=[%1]
For Crystal Report
SELECT T0.[DocNum] as 'Invoice No.', T0.[DOCDATE] as 'Invoice Date', T0.[CardName] as 'Customer Name' ,
FROM OINV WHERE T0.[DOCDATE >= {?FromDate} AND T0.[DOCDATE ]< = {?ToDate}
Pass Parameter in Crystal Report in thats type of syntax
When you have to add command Right side Parameter button will appear
For Layout pass
{?@Dockey}
This is must.
Thanks,
Srujal Patel -
Prompts for Combine similar request (Union query)
I have been given 5 tables for creating one report out of each table. I created aliases and
necessary self joins. I now need a summaryreport that combines these five tables. I tried the
"combine similar request" and the report functions fine. Now I have to create two prompts, one for
country and one for job. These are fields available in 4 tables and have the same format alongwith
the same datatypes. Please help me with this.
Table 1 Report A
Table 2 Report B
Table 3 Report C
Table 4 Report D
Table 5 Report E
Table 1 - Table 4 contains Country and Job field which is of the same format and datatype.
Table 5 does not have these and its not necessary for us to prompt this.
This has no star schema setup and I am not in a position to get it done as well. I considered each
table to be a fact table and created aliases, selfjoins etc. Please help with the procedure to
create the two dashboard prompts. If I choose USA then the first four amongst the union queries
should reflect data for the USA. The same applies for Job.Hello
Thanks for the reply.
My problem here is that I have 5 different tables with country fields in them. They are of the same format and datatype but there is no join between these tables. If I choose one Country field from any particular table, then the combine similar request doesnt seem to take it for other queries where the fields come from a different table.
eg.
Table 1 - table 5 have country fields
I choose to create a prompt based on Country from Table 1. The union query doesnt seem to reflect on filtering values on the queries from other tables. It would filter only the values from table 1.
Please let me know as to what can be done! -
E-Rows = NULL and A-Rows=42M? Need help in understanding why.
Hi,
Oracle Standard Edition 11.2.0.3.0 CPU Oct 2012 running on Windows 2008 R2 x64. I am using Oracle 10g syntax for WITH clause as the query will also run on Oracle 10gR2. I do not have a Oracle 10gR2 environment at hand to comment if this behaves the same.
Following query is beyond me. It takes around 2 minutes to return the "computed" result set of 66 rows.
SQL> WITH dat AS
2 (SELECT 723677 vid,
3 243668 fid,
4 TO_DATE ('06.03.2013', 'dd.mm.yyyy') mindt,
5 TO_DATE ('06.03.2013', 'dd.mm.yyyy') maxdt
6 FROM DUAL
7 UNION ALL
8 SELECT 721850,
9 243668,
10 TO_DATE ('06.02.2013', 'dd.mm.yyyy'),
11 TO_DATE (' 22.03.2013', 'dd.mm.yyyy')
12 FROM DUAL
13 UNION ALL
14 SELECT 723738,
15 243668,
16 TO_DATE ('16.03.2013', 'dd.mm.yyyy'),
17 TO_DATE (' 04.04.2013', 'dd.mm.yyyy')
18 FROM DUAL)
19 SELECT /*+ GATHER_PLAN_STATISTICS */ DISTINCT vid, fid, mindt - 1 + LEVEL dtshow
20 FROM dat
21 CONNECT BY LEVEL <= maxdt - mindt + 1
22 order by fid, vid, dtshow;
66 rows selected.
SQL>
SQL> SELECT * FROM TABLE (DBMS_XPLAN.display_cursor (NULL, NULL, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
SQL_ID 9c4vma4mds6zk, child number 0
WITH dat AS (SELECT 723677 vid, 243668 fid,
TO_DATE ('06.03.2013', 'dd.mm.yyyy') mindt,
TO_DATE ('06.03.2013', 'dd.mm.yyyy') maxdt FROM DUAL
UNION ALL SELECT 721850, 243668,
TO_DATE ('06.02.2013', 'dd.mm.yyyy'), TO_DATE ('
22.03.2013', 'dd.mm.yyyy') FROM DUAL UNION ALL
SELECT 723738, 243668, TO_DATE
('16.03.2013', 'dd.mm.yyyy'), TO_DATE (' 04.04.2013',
'dd.mm.yyyy') FROM DUAL) SELECT /*+
GATHER_PLAN_STATISTICS */ DISTINCT vid, fid, mindt - 1 + LEVEL dtshow
FROM dat CONNECT BY LEVEL <= maxdt - mindt + 1 order by fid, vid,
dtshow
Plan hash value: 1865145249
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | OMem | 1Mem | Used-Mem |
| 0 | SELECT STATEMENT | | 1 | | 66 |00:01:54.64 | | | |
| 1 | SORT UNIQUE | | 1 | 3 | 66 |00:01:54.64 | 6144 | 6144 | 6144 (0)|
| 2 | CONNECT BY WITHOUT FILTERING (UNIQUE)| | 1 | | 42M|00:01:04.00 | | | |
| 3 | VIEW | | 1 | 3 | 3 |00:00:00.01 | | | |
| 4 | UNION-ALL | | 1 | | 3 |00:00:00.01 | | | |
| 5 | FAST DUAL | | 1 | 1 | 1 |00:00:00.01 | | | |
| 6 | FAST DUAL | | 1 | 1 | 1 |00:00:00.01 | | | |
| 7 | FAST DUAL | | 1 | 1 | 1 |00:00:00.01 | | | |
--------------------------------------------------------------------------------------------------------------------------If I take out one of the UNION queries, the query returns in under 1 second.
SQL> WITH dat AS
2 (SELECT 723677 vid,
3 243668 fid,
4 TO_DATE ('06.03.2013', 'dd.mm.yyyy') mindt,
5 TO_DATE ('06.03.2013', 'dd.mm.yyyy') maxdt
6 FROM DUAL
7 UNION ALL
8 SELECT 721850,
9 243668,
10 TO_DATE ('06.02.2013', 'dd.mm.yyyy'),
11 TO_DATE (' 22.03.2013', 'dd.mm.yyyy')
12 FROM DUAL)
13 SELECT /*+ GATHER_PLAN_STATISTICS */ DISTINCT vid, fid, mindt - 1 + LEVEL dtshow
14 FROM dat
15 CONNECT BY LEVEL <= maxdt - mindt + 1
16 order by fid, vid, dtshow;
46 rows selected.
SQL>
SQL> SELECT * FROM TABLE (DBMS_XPLAN.display_cursor (NULL, NULL, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
SQL_ID 1d2f62uy0521p, child number 0
WITH dat AS (SELECT 723677 vid, 243668 fid,
TO_DATE ('06.03.2013', 'dd.mm.yyyy') mindt,
TO_DATE ('06.03.2013', 'dd.mm.yyyy') maxdt FROM DUAL
UNION ALL SELECT 721850, 243668,
TO_DATE ('06.02.2013', 'dd.mm.yyyy'), TO_DATE ('
22.03.2013', 'dd.mm.yyyy') FROM DUAL) SELECT /*+
GATHER_PLAN_STATISTICS */ DISTINCT vid, fid, mindt - 1 + LEVEL dtshow
FROM dat CONNECT BY LEVEL <= maxdt - mindt + 1 order by fid, vid,
dtshow
Plan hash value: 2232696677
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | OMem | 1Mem | Used-Mem |
| 0 | SELECT STATEMENT | | 1 | | 46 |00:00:00.01 | | | |
| 1 | SORT UNIQUE | | 1 | 2 | 46 |00:00:00.01 | 4096 | 4096 | 4096 (0)|
| 2 | CONNECT BY WITHOUT FILTERING (UNIQUE)| | 1 | | 90 |00:00:00.01 | | | |
| 3 | VIEW | | 1 | 2 | 2 |00:00:00.01 | | | |
| 4 | UNION-ALL | | 1 | | 2 |00:00:00.01 | | | |
| 5 | FAST DUAL | | 1 | 1 | 1 |00:00:00.01 | | | |
| 6 | FAST DUAL | | 1 | 1 | 1 |00:00:00.01 | | | |
26 rows selected.What I cannot understand is why the E-Rows is NULL for "CONNECT BY WITHOUT FILTERING (UNIQUE)" step and A-Rows shoots up to 42M for first case. The behaviour is the same for any number of UNION queries above two.
Can anyone please help me understand this and aid in tuning this accordingly? Also, I would be happy to know if there are better ways to generate the missing date range.
Regards,
SatishMay be, this?
WITH dat AS
(SELECT 723677 vid,
243668 fid,
TO_DATE ('06.03.2013', 'dd.mm.yyyy') mindt,
TO_DATE ('06.03.2013', 'dd.mm.yyyy') maxdt
FROM DUAL
UNION ALL
SELECT 721850,
243668,
TO_DATE ('06.02.2013', 'dd.mm.yyyy'),
TO_DATE (' 22.03.2013', 'dd.mm.yyyy')
FROM DUAL
UNION ALL
SELECT 723738,
243668,
TO_DATE ('16.03.2013', 'dd.mm.yyyy'),
TO_DATE (' 04.04.2013', 'dd.mm.yyyy')
FROM DUAL)
SELECT vid, fid, mindt - 1 + LEVEL dtshow
FROM dat
CONNECT BY LEVEL <= maxdt - mindt + 1
and prior vid = vid
and prior fid = fid
and prior sys_guid() is not null
order by fid, vid, dtshow;
66 rows selected.
Elapsed: 00:00:00.03 -
How to add a default value in a prompt list?
I have a prompt list that I'm getting from the database, I want to add a deafult value in the top of the list. Ei "ALL", my current list is:
"AMERICAS"
"EMEA"
"ASIA"
I want a list like:
"ALL"
"AMERICAS"
"EMEA"
"ASIA"
This is the code I have:
@Select(Country Region\Regionname)IN @Prompt('Enter the region','A',{'All'}distinct 'Country Region\Regionname',Multi,Constrained)
It is displaying only "All". Does someone know how to merge text with a database list in a promp variable?
Thank you!
Marcelaplease find this post
i've solved this problem with someone before
Optional User prompt
ok, lets get back to our problem
since you are in sybase databases i dont know weather there is a DUAL table like oracle or not,
anyway forget about it and follow those steps
1. import the universe to the desginer
2. Right Click any empty space on the Stage to Create a derived table.
3. Give The derived table any Dummy Name lets say "ALL_table"
4. write a small SQL statment in the derived table "Enter SQL Expression"
select 'ALL' from anytable you have in the database.
lets say the countries table itself
SELECT 'ALL' FROM USER.COUNTRIES
validate the SQL and Click ok.
5.you will have a derived table called "ALL_table" with field name "ALL"
6.Drag the Field Name ALL to the Same Class whicn you "Country Name" in.
7.Get back to your "Country Name" Dimension and Double Click it to get its properties, then go to the Properties tab.
8.in the peroperties tab. "Associate List of Values" ,, Click "Edit" Button.
9.you will find your "Country Name" Dimension, click "Combine Queies" icon in the bar, to have another queries union with the first one.
10. you will have another query with "U" beside itm Drag the "ALL" dimension in it, and remove the "Country Name"
so you will have 2 union queries one with the "Country Name" and another on with "ALL"
gooooooood.
11.Click "Save and Close"
12.Check Export with universe and "Automatically Refresh before use"
13.now you can hide the "ALL" dimension we have created before, to make it invisible for the users. (do you have problem hiding this dimension?)
14.export your universe
15.open WebI
16.Create Report on this universe.
17.put the "Country Name" Dimension on the filter and make it prompt,
18.Run the query,
19. tell me what you see?
good luck
Amr -
Group by Clause displaying all lookup values
Hello Friends
I've a simple table with columns namely Date, Reason, Product and Count and the sample data is displayed below.
==========================
Date Reason Product Count
==========================
06/08/2012 Reason1 Home 1
07/08/2012 Reason2 Motor 1
08/08/2012 Reason1 Home 1
09/08/2012 Reason3 Home 2
10/08/2012 Reason1 Home 1
06/08/2012 Reason5 Home 1
===========================
In total I've 5 reason lookup values from Reason1 through to Reason5, but the above table consists of few of them.
I would like to diplay result per day and take an example of 6th August, I want to display below result, i.e. display all 5 reason looksup and assign zero count if there are no records for that day.
=====================================
DATE REASON HOME_COUNT MOTOR_COUNT
=====================================
06/08/2012 Reason1 1 0
06/08/2012 Reason2 0 1
06/08/2012 Reason3 0 0
06/08/2012 Reason4 0 0
06/08/2012 Reason5 1 0
=====================================
If we write group by clause, missing reasons like Reason3 and Reason4 will not be displayed in the result set.
And I've tried to write multiple UNION ALL queries to get the above result which works fine, but if there 100 lookup values, I do not want to write 100 Union queries.
Please let me know if you have any analytical functions to display the end results?
Thanks
Murali.
Edited by: Muralidhar b on Aug 19, 2012 8:17 PMIf you followed relational design, you have reason lookup table. If you do not have it you should create one. Also, date is reserved word and count is a keyword, so do not use them as column names. Then use outer join:
SQL> create table tbl as
2 select to_date('06/08/2012','dd/mm/yyyy') dt,'Reason1' reason,'Home' product,1 qty from dual union all
3 select to_date('07/08/2012','dd/mm/yyyy'),'Reason2','Motor',1 from dual union all
4 select to_date('08/08/2012','dd/mm/yyyy'),'Reason1','Home',1 from dual union all
5 select to_date('09/08/2012','dd/mm/yyyy'),'Reason3','Home',2 from dual union all
6 select to_date('10/08/2012','dd/mm/yyyy'),'Reason1','Home',1 from dual union all
7 select to_date('06/08/2012','dd/mm/yyyy'),'Reason5','Home',1 from dual
8 /
Table created.
SQL> create table reason_list as
2 select 'Reason' || level reason from dual connect by level <= 5
3 /
Table created.
SQL> select d.dt,
2 r.reason,
3 nvl(
4 sum(
5 case product
6 when 'Home' then qty
7 end
8 ),
9 0
10 ) home_qty,
11 nvl(
12 sum(
13 case product
14 when 'Motor' then qty
15 end
16 ),
17 0
18 ) motor_qty
19 from (
20 select min_dt + level - 1 dt
21 from (
22 select min(dt) min_dt,
23 max(dt) max_dt
24 from tbl
25 )
26 connect by level <= max_dt - min_dt + 1
27 ) d
28 cross join
29 reason_list r
30 left join
31 tbl t
32 on (
33 t.dt = d.dt
34 and
35 t.reason = r.reason
36 )
37 group by d.dt,
38 r.reason
39 order by d.dt,
40 r.reason
41 /
DT REASON HOME_QTY MOTOR_QTY
06-AUG-12 Reason1 1 0
06-AUG-12 Reason2 0 0
06-AUG-12 Reason3 0 0
06-AUG-12 Reason4 0 0
06-AUG-12 Reason5 1 0
07-AUG-12 Reason1 0 0
07-AUG-12 Reason2 0 1
07-AUG-12 Reason3 0 0
07-AUG-12 Reason4 0 0
07-AUG-12 Reason5 0 0
08-AUG-12 Reason1 1 0
DT REASON HOME_QTY MOTOR_QTY
08-AUG-12 Reason2 0 0
08-AUG-12 Reason3 0 0
08-AUG-12 Reason4 0 0
08-AUG-12 Reason5 0 0
09-AUG-12 Reason1 0 0
09-AUG-12 Reason2 0 0
09-AUG-12 Reason3 2 0
09-AUG-12 Reason4 0 0
09-AUG-12 Reason5 0 0
10-AUG-12 Reason1 1 0
10-AUG-12 Reason2 0 0
DT REASON HOME_QTY MOTOR_QTY
10-AUG-12 Reason3 0 0
10-AUG-12 Reason4 0 0
10-AUG-12 Reason5 0 0
25 rows selected.
SQL> SY. -
We are using a view which comprises of 5 to 6 union queries.Each union query of the view returns large number of rows when we do a normal select without any where clause on that view it takes a long time any clue ???.
Also our main requirement is to just get very few rows depending upon the where clause which for which we are forming a query over the view but that also takes very long time...????
Any idea how we ensure that each union query inside the view first takes the where clause passed by the user and then does the union...????
Or any clue how do we overcome this problem >>>>Without seeing the actual queries, it is really difficult to give any specific advice. However, a couple of general points that may help.
Do you use UNION or UNION ALL in your view? UNION requires a sort to remove duplicate rows from the set of unioned queries. If each of the unioned queries is independent (that is, no two queries will return the same row), you can use UNION all and save a sort.
If you are using the Cost Based Optimizer and have up to date statistics, and the individual queries in the union view have where clauses, Oracle may be able to only evaluate one of the queries if the WHERE clause in your main query matches the WHERE clause in one of the unioned queries, and the unioned queries are mutually exclusive.
Finally, can you re-write the view to not use a UNION at all?
HTH
John
Maybe you are looking for
-
How do I play iTunes Music Videos on my PC
I bought a music video on my iPad and want to play it on my Laptop. I can't find anywhere on iTunes on my Laptop where that option comes up. I can search the same music video on the iTunes store on my laptop and it comes up for sale again. I used to
-
I, recently, installed a new hard drive on my MacBook Pro Laptop Computer (2007 model). Now, I cannot print out anything on my HP Photosmart C7180 All-In-One Printer! They don't seem to be connected, as the printer icon shows up on my computer, an
-
Render Lighting (and other 3D things) don't work on my laptop. Initially in Preferences Performance, Use Graphics Processor wasn't checked. In that scenario, I didn't get the first message below - just the secind one (not enough memory). I go back to
-
Problem in reading the modified text from text editor
Hi all, Im using text editor for saving the long text entered in the text editor as standard text in So10 tcode. Here im facing an issue in reading the text from text editor. That is, when the text is entered by the user for first time, then the belo
-
Customized PO report is printing blank after R12 upgrade
We have upgraded from 11.5.9 to R 12.1.3 .The customized PO report works fine in 11i but prints blank in R12. Kindly help.It is a bit urgent.