Solved

# Sort Column in SQL Server

Posted on 2013-05-18
382 Views
Hi,

I have two columns in table MEMBERFAMILY called MEMBERNO and SPOUSENO.

The Data stored in these columns are as follows

MEMBERNO          SPOUSENO
A-1                         A-2
B-11                       B-101
B-14                       B-114

I need the ouput AS USERNO after sort as under in one column. While sort it is first sorted by alpha and then numeric.

Delimiter "-" is there in all the data

USERNO
A-1
A-2
B-11
B-14
B-101
B-114
0
Question by:GRChandrashekar
• 4
• 2
• 2
• +1

LVL 68

Expert Comment

If we can rely on a fixed format:
``````select * from
(select memberno as userno from memberfamily
union
select spouseno from memberfamily
) data
order by left(userno,1), substring(userno, 3, 10)
``````
0

Author Comment

Only delimiter is constant.
Alpha may be A, CRPB, XYZDDES and so on
Similarly length of number also is not fixed, it may be 0,10023342342, 34 and so on
0

LVL 68

Accepted Solution

Qlemo earned 250 total points
I was afraid of that. Besides, the secondary sort expression was incorrect.
``````select userno from
(select memberno as userno, charindex('-', memberno) as idx from memberfamily
union
select spouseno, charindex('-', spouseno)  from memberfamily
) data
order by left(userno,idx), cast(substring(userno, idx+1, 100) as bigint)
``````
0

LVL 31

Expert Comment

So, if alpha includes A, B, and ABC, the order should be?
A
ABC
B
0

LVL 48

Assisted Solution

PortletPaul earned 250 total points
``````select
code
from (
select
MEMBERNO as code
, substring(MEMBERNO,1,charindex('-',MEMBERNO)-1) as alpha
, cast(substring(MEMBERNO,charindex('-',MEMBERNO)+1,50) as int) as num
from MEMBERFAMILY
union all
select
SPOUSENO
, substring(SPOUSENO,1,charindex('-',MEMBERNO)-1)
, cast(substring(SPOUSENO,charindex('-',MEMBERNO)+1,50) as int)
from MEMBERFAMILY
) ms
order by alpha, num
``````
0

LVL 31

Expert Comment

PortletPaul beat me to it (again) but thought I would still post my solution -
select * from
(select memberno as userno from memberfamily
union all
select spouseno as userno from memberfamily) as x
order by substring(userno,1,charindex('-',userno)-1),
cast(substring(userno,charindex('-',userno)+1,len(userno)) as int;
0

LVL 68

Expert Comment

In which way is PortletPaul's code to prefer over my much more simple one?
0

LVL 48

Expert Comment

I haven't tested it but his proposed solution does indeed appear to meet the requirements.
I  can't offer any opinion as to why mine was chosen.

I wish to add is that my suggestion was done without reference to Qlemo's
0

LVL 68

Expert Comment

Suppose equal split between http:#a39177320 and http:#a39177334 would be appropriate.
0

## Featured Post

This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Load balancing is the method of dividing the total amount of work performed by one computer between two or more computers. Its aim is to get more work done in the same amount of time, ensuring that all the users get served faster.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…