Condition in Order by clause?
hi,
my db version is,
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
Im having a query like this,
select a,b,c,d,sum(e) from f group by a,b,c,d order by a,b,c,d
Now if the value of the a is 1 i want to have the result of following query
select a,b,c,d,sum(e) from f group by a,b,c,d order by b,a,c,d
The only change between the above two queries are order by clause.
How to achieve this?
Good help will be appreciated.
Regards
Sankar MN
Edited by: SankarMCA on Oct 5, 2010 4:51 AM
SankarMCA wrote:
Im having a query like this,
select a,b,c,d,sum(e) from f group by a,b,c,d order by a,b,c,dNow if the value of the a is 1 i want to have the result of following query
select a,b,c,d,sum(e) from f group by a,b,c,d order by b,a,c,d
What do you mean by "if the value of a is 1"?
Is it then 1 for the whole result set?
Or only with a 'group' that has a=1?
If the latter, then since b,c,d are mentioned in the same order in both order-by clauses, there should be no difference.
Maybe, you could post two sample outputs (one for both order-by) of this query, so we can see what you mean?
Similar Messages
-
Conditional order by clause with multiple columns
I would like to know whether it is possible to include multiple columns in a conditional order by clause.
Ex: I have written the following PL / SQL :
CREATE PROCEDURE GetProducts
@OrderBy VARCHAR(50),
@Input2 VARCHAR(30)
AS
BEGIN
SET NOCOUNT ON
SELECT Id, ProductName, Description, Price, Quantity
FROM Products
WHERE ProductName LIKE @Input2
ORDER BY
CASE
WHEN @OrderBy = 'ProductNameAsc' THEN ProductName
END ASC,
CASE
WHEN @OrderBy = 'ProductNameDesc' THEN ProductName
END DESC
END
Now I want to include when the Orderby - "Productnameasc" then order by productname, price, stdate
else
orderby productname, crdate, category
Could this be done? I tried it, but couldn't get this to work.
Any help is greatly appreciated.Since matching ORDER BY columns have different data types (first column for CLERK is sal - number, first column for MANAGER deptno is number but first column for "else" is a string) we need to convert number to string but preserve number sort order. Since DEPTNO is NUMBER(2) we will use TO_CHAR with format 'S00'. Since SAL is NUMBER(7,2) we will use TO_CHAR with format model 'S00000D00'. For EMPNO we will use TO_CHAR with format model 'S0000'.
select deptno,
empno,
ename,
job,
sal
from emp
order by case job
when 'CLERK' then to_char(sal,'S00000D00')
when 'MANAGER' then to_char(deptno,'S00')
else ename
end,
case job
when 'CLERK' then to_char(deptno,'S00')
else job
end,
case job
when 'CLERK' then job
when 'MANAGER' then to_char(empno,'S0000')
end
DEPTNO EMPNO ENAME JOB SAL
20 7369 SMITH CLERK 800
30 7900 JAMES CLERK 950
20 7876 ADAMS CLERK 1100
10 7934 MILLER CLERK 1300
10 7782 CLARK MANAGER 2450
20 7566 JONES MANAGER 2975
30 7698 BLAKE MANAGER 2850
30 7499 ALLEN SALESMAN 1600
20 7902 FORD ANALYST 3000
10 7839 KING PRESIDENT 5000
30 7654 MARTIN SALESMAN 1250
DEPTNO EMPNO ENAME JOB SAL
20 7788 SCOTT ANALYST 3000
30 7844 TURNER SALESMAN 1500
30 7521 WARD SALESMAN 1250
14 rows selected.
SQL> SY. -
Default where with order by clause
Hi all
How to use Default where with order by clause
for example i want to use Default_where clause with order by clause
Regards
Shahzaib ismailHi,
I have a similar query for where clause.
my query-find form is a multi record form like below:
Criteria - Condition - Value
Item/Category/Planner (List_Item) - Equals/Among (List_Item) - text_FIELD
Item - Equals - ITEM_1
Category - Among - ('CAT1', 'CAT2')
Planner - Equals - PL1
Find_BUTTON Clear_BUTTON
User can select any criteria and condition combination and then enter the value in "Value" text field.
My query is: how can I prepare a where clause based on user input since the user can enter any number of values/combinations? I guess I would have to use some looping to generate where clause.
Thanks
Imran -
Derived tables and Order by clause
Hi,
I have a query that looks as below.
The execution time of the query (10 sec) is fine when order by clause is removed from the query. But with order by clause, the execution time is 40 times more(400 sec). How to optimize this query so that it will execute within a minute, with ORDER BY clause included?
select X.a1, X.a2, X.a3, X.a4, Y.b1, Y.b2, Y.b3
from (select A.a1 a1, A.a2 a2, A.a3 a3, A.a4 a4
from A_table A
where A.a1 = 'something') X,
(select B.b1 b1, B.b2 b2, B.b3 b3
from B_table B
where B.b1 = 'some') Y
where
X.a1 = Y.a1 (+) AND (some other conditions)
order by X.a1, X.a2, Y.b1, Y.b2, X.a3, X.a4
thanks in advance,
VenkatYou do need the inline view Y if you are outer joining it because you must apply the
where B.b1 = 'some'
condition first.
However, the inline view X is not needed. Still, I'm not sure that getting rid of it is going to improve performance. Try it and see.
Incidentally, the outer join condition
where X.a1 = Y.a1 (+)
refers to Y.a1, but the inline view Y has no column named a1. Did you mean Y.b1?
What are the "some other conditions"? Do any of them involve the inline view Y alone (that is, are not join conditions)? If so, it may be that either: a) you don't need an outer join, or, b) those conditions should be moved into the inline view Y. In either case, this may improve performance.
Are you sure the execution time without the order by clause is really 10 seconds? Or, is that just the elapsed time to return the first row? With the order by clause, Oracle must identify all the rows before it can return the first row. -
Hi, everyone,
I am trying to use the following insert statement to insert records in asc order. if i use the select statement alone the order by clause works fine, but when i use the same sql and add a insert into table statment the order by clause does not work. I am not getting the records in ascending order. could anybody help me in this regard?
INSERT INTO cat_sales_stg
select b.SSC,
ltrim(rtrim(a.CAT_DESC)) cat_desc,
SUM(a.AMOUNT) AMOUNT
FROM Trans a, SSC b
WHERE a.ACCOUNT_NUMBER = TO_CHAR(b.ACCOUNT_NUMBER)
AND a.TMONTH >= 200905 AND a.TMONTH <= 200910
AND a.FORMAT_NAME = 'ABC'
AND b.BMONTH = 200910
AND b.SAMPLE = 3
AND b.BANNER_NAME = 'ABC'
AND b.MODEL_NAME = 'XYZ'
group by b.SSC, ltrim(rtrim(a.CAT_DESC))
order by ssc,cat_desc
Thanks in advanceuser10636796 wrote:
Hi, everyone,
I am trying to use the following insert statement to insert records in asc orderWhat Toon, William, and others have said is that you DON'T insert rows in a specific order. That is completely outside the way relational databases are designed. You insert rows as unordered and use an ORDER BY clause in a SELECT when reading them. ORDER BY is for SELECT statements, not INSERT.
In particular Toon poined out that we can't control where individual rows get stored.
There is a databas object called a varray that can store data in sorted order. I have never seen them used because selecting the data back out again is more work; using an ordinary table and an ORDER BY clause is much easier. -
Suppress "Order By" clause in Answers Query
Hello,
Is it possible to Suppress "Order By" clause in Answers Query.
I'm using a database view as data source. In the view definition, "order by" clause is already specified. Is it possible to get the same order in the OBIEE report??
I do not want to use Sort Order column in the repository.
Thanks,
GirishYou add a rownumber to your DB view and use that to 'sort' your report.
regards
John
http://obiee101.blogspot.com/ -
How to make an ORDER BY clause dynamic
is there anyway to make the ORDER BY clause in an SQL query within a DB control
dynamic? I have tried to pass a String of the column name and place it in the
statement within {}, but it doesn't work"Mark" <[email protected]> wrote:
>
is there anyway to make the ORDER BY clause in an SQL query within a
DB control
dynamic? I have tried to pass a String of the column name and place
it in the
statement within {}, but it doesn't workDid you find how ? please let me know, I also need to have a dynamic order by
clause. -
In Report,order by clause is not working
Hi All,
For the report i prepared the query in this one am using the order by clause,i run the query in the sql plus working fine am getting the data based on the order by clause.when i use the same query for the report am getting the data but not in the order(i.e order by clause in not working).
Please help me how to do this one.
Thanks in Advance.
Regards,
Leelakrishna.GHi Dora,
Data is coming in the proper sequence,but in the first group data is not coming(In first group data first line only displaying,remaining data is not comming).
My req is:
The report is executing based on the creation date(i.e.,from creation date to today).
In this so many Purchase requisitions will be there for this one different approval in different times will be there.
For Ex:
we will take 2 PR number only(for the first one 3 approvals,second one 4 levels of approval).
1. one supplier 1person raised by 1PR submit
No Action
Approve
2. 2Supplier 2personraised by 2PR Submit
NO Action
Forword
Approve
with ur suggestion am trying data is gettin fine but first group first line is coming remaining data is not coing.
EX:
1. one supplier 1person raised by 1PR submit
No Action
Approve
2PR Submit
NO Action
Forword
Approve
Note:"2. 2Supplier 2personraised by " this kind of lines data is missing.
Can you pls check and suggest me how i can do this.
Thanks in Advance.
Regards,
Leelakrishna.G -
Error : The ORDER BY clause is invalid in views, inline functions, derived
Hi All,
I am on 11g 6.2, Windows Server 2008, my db SQL server 2008, I am facing the error for the reports in which I am trying to edit one the column formula and do something like 'abc/sum(abc)*100'.
10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 43113] Message returned from OBIS. [nQSError: 43119] Query Failed: [nQSError: 16001] ODBC error state: 37000 code: 8180 message: [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared.. [nQSError: 16001] ODBC error state: 37000 code: 1033 message: [Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.. [nQSError: 16002] Cannot obtain number of columns for the query result. (HY000)
One of the solutions to this which I have found is to edit the EXPRESSION_IN_ORDERBY_SUPPORTED feature in the db properties.
I want to know what does EXPRESSION_IN_ORDERBY_SUPPORTED means?
When I create a calculations in 11g like abc/sum(abc) in the column formula for a column then i get this error.
What does this error mean? Does OBIEE 11g doesn't support using these expressions in the report and the fact that it applies the order by clause to the reports, the report fail?
Could anybody please explain the issue. There is very limited information on this over the web.
Thanks in advance.
RonnyThanks svee for the quick response, actually i had resolved the issue by unchecking the EXPRESSION_IN_ORDERBY_SUPPORTED option in the database. I want to understand how does that makes the difference?
What does EXPRESSION_IN_ORDERBY_SUPPORTED mean? Does it mean that if I give any expression in my answers report and since obiee uses a order by for all the queries, the expression won't be supported?
Please explain. -
Order by clause in cursor problem
Hello,
I'm unable to compile package body when i'm using order by clause in cursor subquery in stored procedure.
Sample code:
CREATE PACKAGE Announces AS
TYPE tRefCur IS REF CURSOR;
PROCEDURE TopAnnounces(
iiCount IN NUMBER,
osAnnounces OUT tRefCur,
oiRetVal OUT NUMBER
END Announces;
CREATE PACKAGE BODY Announces AS
PROCEDURE TopAnnounces(
iiCount IN NUMBER,
osAnnounces OUT NUMBER,
oiRetVal OUT NUMBER
AS
BEGIN
OPEN osAnnounces FOR
SELECT Id, Name, AnnCount FROM
SELECT Id, Name, COUNT(CategoryId) AS AnnCount FROM tblAnnounces
GROUP BY Id, Name
-- bellow is the line, where the code crash
ORDER BY AnnCount DESC
WHERE ROWNUM < iiCount + 1;
oiRetVal := 0;
EXCEPTION
WHEN OTHERS THEN
oiRetVal := -255;
END TopAnnounces;
END Announces;
If I compile the code above I will get this error:
PLS-00103: Encoutered the symbol "ORDER" when expecting on of the following:
After I remark the problematic line, the compilation is successful (but not the result :).
Is there something I'm doing wrong?
Thanks for advice
Vojtech Novacek
nullSorry you can not use order by clause into one temporal table created by subquery.
Put the order by clause offside of subquery.
Atte.
CC.
<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Vojtech Novacek:
Hello,
I'm unable to compile package body when i'm using order by clause in cursor subquery in stored procedure.
Sample code:
CREATE PACKAGE Announces AS
TYPE tRefCur IS REF CURSOR;
PROCEDURE TopAnnounces(
iiCount IN NUMBER,
osAnnounces OUT tRefCur,
oiRetVal OUT NUMBER
END Announces;
CREATE PACKAGE BODY Announces AS
PROCEDURE TopAnnounces(
iiCount IN NUMBER,
osAnnounces OUT NUMBER,
oiRetVal OUT NUMBER
AS
BEGIN
OPEN osAnnounces FOR
SELECT Id, Name, AnnCount FROM
SELECT Id, Name, COUNT(CategoryId) AS AnnCount FROM tblAnnounces
GROUP BY Id, Name
-- bellow is the line, where the code crash
ORDER BY AnnCount DESC
WHERE ROWNUM < iiCount + 1;
oiRetVal := 0;
EXCEPTION
WHEN OTHERS THEN
oiRetVal := -255;
END TopAnnounces;
END Announces;
If I compile the code above I will get this error:
PLS-00103: Encoutered the symbol "ORDER" when expecting on of the following:
After I remark the problematic line, the compilation is successful (but not the result :).
Is there something I'm doing wrong?
Thanks for advice
Vojtech Novacek<HR></BLOCKQUOTE>
null -
Order By clause in Receiver JDBC adapter
Hello All,
Is it possible to construct a select statement that uses an Order by clause in JDBC receiver adapter?
ex : I would like the JDBC adapter to from a query as follows:
<b>Select * from EMP where sal = 10000 order by empid</b>
We are able to construct the select statement without order by clause but not with it.
Can any one suggest me how to do it. This is bit urgent for us.
Thanks
Abinashhi,
did you try with
SQL_DML
http://help.sap.com/saphelp_nw04/helpdata/en/2e/96fd3f2d14e869e10000000a155106/content.htm
Regards,
michal -
Hi,
I wanted to know if this is possible with order by clause and union. some how union messes up the ordering of the left part of the union statement.
assume the data is as below in table tab1
c1 c2
4 1
4 2
5 1
5 2
7 1
7 2
8 3
9 4
the expected output must be for all c1 < 7 ordering must be on c1 and for all c1 > 7 ordering must be on c2.
so the query i tried was
select c1,c2 from tab1 where c1 <7 order by c1
union
select c1,c2 from tab1 where c1 >=7 order by c2
it is giving the message 'Sql command not properly ended'.
Suggestions are welcomeSQL>
SQL> With t As
2 (
3 Select 4 c1, 1 c2 From dual Union All
4 Select 4 ,2 From dual Union All
5 Select 5 ,1 From dual Union All
6 Select 5 ,2 From dual Union All
7 Select 7 ,1 From dual Union All
8 Select 7 ,2 From dual Union All
9 Select 8 ,3 From dual Union All
10 Select 9 ,4 From dual
11 ), t1 As (Select c1,c2 From t Where c1 <7 Order By c1)
12 ,t2 As (select c1,c2 from t where c1 >=7 Order By c2)
13 Select * From t1 Union All
14 Select * From t2;
C1 C2
4 1
4 2
5 1
5 2
7 1
7 2
8 3
9 4
8 rows selected
SQL> /*-- Union All
2 select c1,c2 from t where c1 >=7
3 Order By c1,c2;
4 */
5
with union clause order by must be placed in the end,,
select c1 from dual union all
select c2 from dual
order by c1 -
Order by clause with Named Query
hi
i have to give order by clause in Named Query
how we have to specify is can any body help
thanks
HarishAssuming an Entity called Handset:
select h from Handset h order by h.description -
Order by clause in PL/SQL cursors
I am trying to execute a procedure with some input parameters. I open a cursor
with a select statement. However, the order by clause in the query does not
recognize parameter sent through the procedure input parameters.
For example:
open <<cursor name>> for
select id from member order by <<dynamic parameter>>" does not work (Compiles fine but does not return the right result).
But if I try and give a static order by <<column name>> it works. Is the
order by clause in the PL/SQL a compile time phenomenon?
I have also tried it through dynamic sql. All the other parameters work except the order by <<parameter>> asc|desc
Also "asc" and "desc" does not work if given dynamically.
What alternatives do I have?
nullI don't think order by can be dynamic in a cursor, but it sure can be using dynamic sql. The only issue is that you must do a replace in the sql string with the dynamic variable. For example:
create or replace procedure test_dyn(p_col in varchar2, p_order in varchar2) as
q varchar2(500);
u_exec_cur number;
u_columnnumber NUMBER;
u_columndate DATE;
u_columnvarchar varchar2(50);
u_cur_count number;
u_ename varchar2(20);
u_sal number;
begin
q := 'select ename, sal from scott.emp order by p_col p_order';
-- got to do these two replaces
q:= replace(q,'p_col',p_col);
q:= replace(q,'p_order',p_order);
u_exec_cur := dbms_sql.open_cursor;
dbms_sql.parse(u_exec_cur,q,dbms_sql.v7);
dbms_sql.define_column(u_exec_cur, 1, u_columnvarchar, 20);
dbms_sql.define_column(u_exec_cur, 2, u_columnnumber);
u_cur_count := dbms_sql.execute(u_exec_cur);
loop
exit when (dbms_sql.fetch_rows(u_exec_cur) <= 0);
dbms_sql.column_value(u_exec_cur, 1, u_ename);
dbms_sql.column_value(u_exec_cur, 2, u_sal);
dbms_output.put_line(u_ename);
dbms_output.put_line(u_sail);
--htp.p(u_ename);
--htp.p(u_sal);
end loop;
end;
show errors;
Now when when I execute my procedure I can change the order by clause all I want, for example:
SQL> set serveroutput on;
SQL> exec gmika.test_dyn('sal','asc');
SMITH
800
ADAMS
1100
WARD
1250
MARTIN
1250
MILLER
1300
TURNER
1500
ALLEN
1600
JLO
2222
BLAKE
2850
JONES
2975
SCOTT
3000
FORD
3000
LOKITZ
4500
KING
5000
JAMES
5151
JAMES
5555
PL/SQL procedure successfully completed.
SQL>
null -
Hi,
Can we use order by clause in Sub query?
While using the order by clause, I am getting the "missing expression error" . If I remove order by clause query executing fine.
Here is my query:
select *
from emp_mstr
where emp_no in(select
emp_no
from emp_mstr
order by branch_no);
Thanks & Regards,
MahiMay be you miss some required spaces also, other than wrong use of ORDER BY
select *
from emp_mstr
where emp_no in
( select e2.emp_no
from emp_mstr e2
-- order by e2.branch_no
);Why do you want to ORDER BY in the subquery, which you use with IN clause? That will not make any difference in the result..Means the result you get with ORDER BY will be same as without that.. And in this case, ORDER by is a unncessary overhead.. And Ordering is very costly..
And why do you want to have the IN clause at all in your query? You are referring the same tables in the main query and sub query..
The below will give the same result
select *
from emp_mstr
where emp_no is not nullIf you want to use another table in the subquery, always use aliasess...
select *
from emp_mstr
where emp_no in
( select e2.emp_no
from emp_mstr2 e2
-- order by e2.branch_no
);
Maybe you are looking for
-
I can see the thumbnail, but the picture isn't there!!!
Hi! I need some help!!! I have been having issues with my camera on my iPhone 4S. I'll take a picture, it'll show up as a thumbnail, but when it's enlarged, the picture is just blank-white. I thought maybe my app was just acting up, but I uploaded th
-
I was able to transfer all my library but when I sync the mini to it the unit gets half way and the device gets disconnected from the computer. It tells me that the ipod was improperly removed and it doesn't show as hooked up to the computer any long
-
Hi, Can anyone give me the correct method for inserting a record into an access 2010 db? I have the connection details but not sure how to execute the actual query. Dim cmd As New ADODB.Command 'Dim cat As New ADOX.Catalog 'Dim dbpath As Stri
-
No accounting doc generated while dong billing
Hi while dong billing this error occur like dis Doc xxxxxxxxx saved(no accounting document generated) give me where cn i check? regards ss
-
Hi, Could someone help? Why am I getting a library function error if (ConnectToTCPServer (&g_hconversation, portNum, serverHostName, clientTCP, NULL, 5000) <0 return 0; portNum is 5000 serverHostName is 192.168.2.3 and I can ping it. my clientT