Celebrate National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Sorting on Decimal Value

Posted on 2003-11-19
7
Medium Priority
?
483 Views
Last Modified: 2008-03-06
Have a look at this query :

Select       Id,  
      sum(Day0) As Day0,
      sum(Day0) As Day1,
      sum(Day0) As Day2,
      sum(Day0) As Day3,
      sum(Day0) As Day4,      
      sum(Total) As Total,
      Cast ( (sum(Day0) *100/ sum(Total)) as decimal(18,3)) As Schedule
From tblABCD
Group by  Id
Order by  Schedule DESC

Output which I get :
---------------------------------------------------
01234 58.45% 34.40% 6.99% 0.13% 0.03%
07729 58.35% 41.47% 0.00% 0.00% 0.18%
07774 58.93% 41.07% 0.00% 0.00% 0.00%
07602 58.99% 41.01% 0.00% 0.00% 0.00%
01042 58.86% 33.21% 1.38% 6.51% 0.05%
00148 58.13% 41.81% 0.00% 0.03% 0.03%
----------------------------------------------------

I have run this query in ASP PAGE and how output was this ?
If u look Percentage after IDS (58.45, 58.35, 58.93, 58.99, 58.86, 58.13) they r not sorted.

Can anyone pls help urgently.

0
Comment
Question by:radhakrishan1
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
7 Comments
 
LVL 29

Expert Comment

by:Nightman
ID: 9778366
Which columns need to be sorted? Do you want to sort only on 1 column or on multiple columns>

You are currently sorting by Schedule DESC - I don't see a schedule column in your results set (in fact, you have 7 columns in your select statement and 6 in your results set)

To sort by Day0, do this:

Select      Id,  
     sum(Day0) As Day0,
     sum(Day0) As Day1,
     sum(Day0) As Day2,
     sum(Day0) As Day3,
     sum(Day0) As Day4,    
     sum(Total) As Total,
     Cast ( (sum(Day0) *100/ sum(Total)) as decimal(18,3)) As Schedule
From tblABCD
Group by  Id
Order by  sum(Day0) DESC --Add multiple columns and order on which to sort here.

Cheers
Night
0
 
LVL 26

Expert Comment

by:Hilaire
ID: 9778456
Select      Id,  
     sum(Day0) As Day0,
     sum(Day0) As Day1,
     sum(Day0) As Day2,
     sum(Day0) As Day3,
     sum(Day0) As Day4,    
     sum(Total) As Total,
     Cast ( (sum(Day0) *100/ sum(Total)) as decimal(18,3)) As Schedule
From tblABCD
Group by  Id
Order by Cast ( (sum(Day0) *100/ sum(Total)) as decimal(18,3)) DESC

Hilaire
0
 

Author Comment

by:radhakrishan1
ID: 9778466
I want to sort out on Schedule which is not column, the value is calculated by dividing values from sum(day0)/sum(total)

Again I don't use Schedule, to display in ASP page, Im just using to sorting it.

Can we sort on just on SCHEDULE.
0
Ransomware: The New Cyber Threat & How to Stop It

This infographic explains ransomware, type of malware that blocks access to your files or your systems and holds them hostage until a ransom is paid. It also examines the different types of ransomware and explains what you can do to thwart this sinister online threat.  

 
LVL 26

Expert Comment

by:Hilaire
ID: 9778478
A little bit of explanation

-you can NOT use a column alias to sort results
-you can use the column# of the resultset
eg order by 3 desc sorts on the third column descending
or you can repeat the column definition, as in my previous post

Order by Cast ( (sum(Day0) *100/ sum(Total)) as decimal(18,3)) DESC

HTH

Hilaire
0
 

Author Comment

by:radhakrishan1
ID: 9778500
Hi Hilaire,

Just tried what u said, but it doesn't sort on decimal places. Means all 97% will be together but it wont take in account the decimal places after the number
0
 
LVL 26

Accepted Solution

by:
Hilaire earned 300 total points
ID: 9778586
Do the decimal places appear in the schedules col ?

If so, use
"order by n desc"
where n is the place of the schedule col in your query

eg try this simplified version

Select      Id,  
     Cast ( (sum(Day0) *100/ sum(Total)) as decimal(18,3)) As Schedule
From tblABCD
Group by  Id
Order by  2 DESC

if the decimal places do not appear in the schedule col in QA,
you 'll have to change the query

(cast(sum(Day0) as decimal(18,3)) * 100.00 / cast(sum(Total)) as decimal(18,3))) as schedule
...
order by (cast(sum(Day0) as decimal(18,3)) * 100.00 / cast(sum(Total)) as decimal(18,3)))

Hilaire
0
 
LVL 26

Expert Comment

by:Hilaire
ID: 9778616
Oops typo

(cast(sum(Day0) as decimal(18,3)) * 100.00 / cast(sum(Total) as decimal(18,3))) as schedule
...
order by (cast(sum(Day0) as decimal(18,3)) * 100.00 / cast(sum(Total) as decimal(18,3)))
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
An alternative to the "For XML" way of pivoting and concatenating result sets into strings, and an easy introduction to "common table expressions" (CTEs). Being someone who is always looking for alternatives to "work your data", I came across this …
Via a live example, show how to extract information from SQL Server on Database, Connection and Server properties
Viewers will learn how the fundamental information of how to create a table.

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question