Author |
Topic |
anilkumarkatta
Starting Member
7 Posts |
Posted - 2009-04-22 : 05:42:59
|
Hi AllI am new to oracle. I have data in my table:col1----AAABCDEFSAAABCDEFS....Now when I execute this statement SELECT distinct col1 FROM mytable order by col1its shows A,AA,B,C,D,E,FS where as I require in the order of AA,A,B,C,D,E,FSwhile I tried with this SELECT distinct col1 FROM mytable order by LEN(col1) DESC, col1 ASC but i'm getting as AA,FS,A,B,C,DPlease help me out..thanks & regards,-Anil Katta |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 05:44:37
|
Oracle?This is a Microsoft SQL Server forum.Try www.dbforums.com E 12°55'05.63"N 56°04'39.26" |
|
|
anilkumarkatta
Starting Member
7 Posts |
Posted - 2009-04-22 : 05:48:50
|
I need solution for MS SQL server only |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 05:50:30
|
Ok, then.Please describe the business dictating that AA should be displayed before A.Where would, for example, AAB be displayed? E 12°55'05.63"N 56°04'39.26" |
|
|
anilkumarkatta
Starting Member
7 Posts |
Posted - 2009-04-22 : 05:57:19
|
as of now the data is like that only...AAAAABAAABC..hope this is would help you.. |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 06:04:51
|
[code]DECLARE @Sample TABLE ( Col1 VARCHAR(20) )INSERT @SampleSELECT 'AA' UNION ALLSELECT 'A' UNION ALLSELECT 'B' UNION ALLSELECT 'C' UNION ALLSELECT 'D' UNION ALLSELECT 'E' UNION ALLSELECT 'FS' UNION ALLSELECT 'AA' UNION ALLSELECT 'AAA' UNION ALLSELECT 'AAB' UNION ALLSELECT 'A' UNION ALLSELECT 'B' UNION ALLSELECT 'C' UNION ALLSELECT 'D' UNION ALLSELECT 'E' UNION ALLSELECT 'FS'SELECT Col1FROM ( SELECT DISTINCT Col1, Col1 + REPLICATE('Z', 10) AS Peso FROM @Sample ) AS dORDER BY Peso[/code] E 12°55'05.63"N 56°04'39.26" |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 06:12:45
|
Or thisSELECT Col1FROM @SampleGROUP BY Col1ORDER BY Col1 + REPLICATE('Z', 10) E 12°55'05.63"N 56°04'39.26" |
|
|
anilkumarkatta
Starting Member
7 Posts |
Posted - 2009-04-22 : 06:19:59
|
thanks Peso last post is fixed my prob |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 09:38:37
|
CREATE TABLE [MyTable]( REC VARCHAR(5))INSERT INTO MyTable VALUES('A')INSERT INTO MyTable VALUES('AA')INSERT INTO MyTable VALUES('B')INSERT INTO MyTable VALUES('C')SELECT * FROM MYTABLEORDER BY CASE WHEN DATALENGTH(REC)>1 THEN 1 ELSE 2 END, RECIam a slow walker but i never walk back |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 09:42:01
|
dineshrajan_it, add the sample data 'bbbbb' into your sample above. E 12°55'05.63"N 56°04'39.26" |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 09:42:02
|
Hi Peso,u r approach is good. but is this correct format since u r hard coding 'z' and replicating.Iam a slow walker but i never walk back |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 09:43:19
|
yes i accept my query works for length <=2.Iam a slow walker but i never walk back |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 09:45:13
|
You can replace 'Z' with CHAR(255) if you want to.It depends on the data in OP's table. E 12°55'05.63"N 56°04'39.26" |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 09:46:44
|
iHope this solves the problem for n no of lengthsSELECT * FROM MYTABLEORDER BY CASE WHEN DATALENGTH(REC)>1 THEN 1 ELSE 2 END, CASE WHEN DATALENGTH(REC) > 1 THEN REC END DESC, RECIam a slow walker but i never walk back |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 09:49:17
|
no iam wrongIam a slow walker but i never walk back |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 09:50:27
|
No. Using my sample data posted 04/22/2009 : 06:04:51 returns this dataFSFSAABAAAAAAAAABBCCDDEE E 12°55'05.63"N 56°04'39.26" |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 09:52:47
|
this works perfectly as far as iam concernedSELECT * FROM MYTABLEORDER BY SUBSTRING(REC,1,1), CASE WHEN DATALENGTH(REC)>1 THEN 1 ELSE 2 END, CASE WHEN DATALENGTH(REC) > 1 THEN REC END DESC, RECIam a slow walker but i never walk back |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 09:55:05
|
Peso,i have reduced my query a bit furtherSELECT * FROM MYTABLEORDER BY SUBSTRING(REC,1,1),CASE WHEN DATALENGTH(REC) > 1 THEN REC END DESCIt works fine. ur suggestions plsIam a slow walker but i never walk back |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 09:59:18
|
Now I getAABAAAAAAAAABBCCDDEEFSFS AAB and AAA need to switch places. E 12°55'05.63"N 56°04'39.26" |
|
|
dineshrajan_it
Posting Yak Master
217 Posts |
Posted - 2009-04-22 : 10:01:12
|
Peso, but the op asked like this format AABAAAAAAAAABBCCDDEEFSFSIam a slow walker but i never walk back |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-22 : 10:03:19
|
No. See post made by OP 04/22/2009 : 05:57:19 E 12°55'05.63"N 56°04'39.26" |
|
|
Next Page
|