Connecting Tech Pros Worldwide Help | Site Map

sorting table while inserting

Oonz
Guest
 
Posts: n/a
#1: May 29 '07
Hi Friends,

How can we insert records in sorted order

like consider a table

No Name Phone
1 test1 12345
1 test1 23455
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594


if i add a new record like this

2 test2 34454

it should go in specific order. so that the final table should look
something like this

No Name Phone
1 test1 12345
1 test1 23455
2 test2 34454
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594

Jason Lepack
Guest
 
Posts: n/a
#2: May 29 '07

re: sorting table while inserting


Tables don't store data in a logical order. They store data in a
physical order. If you want to see data in an ordered fashion then
create a view to do that. Also, Name is a reserved word, don't use
it...

SELECT
No,
NameField,
Phone
FROM
yourTable
ORDER BY
No, NameField, Phone

Cheers,
Jason Lepack
On May 29, 12:04 pm, Oonz <arund...@gmail.comwrote:
Quote:
Hi Friends,
>
How can we insert records in sorted order
>
like consider a table
>
No Name Phone
1 test1 12345
1 test1 23455
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594
>
if i add a new record like this
>
2 test2 34454
>
it should go in specific order. so that the final table should look
something like this
>
No Name Phone
1 test1 12345
1 test1 23455
2 test2 34454
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594

Oonz
Guest
 
Posts: n/a
#3: May 29 '07

re: sorting table while inserting


On May 29, 9:19 pm, Jason Lepack <jlep...@gmail.comwrote:
Quote:
Tables don't store data in a logical order. They store data in a
physical order. If you want to see data in an ordered fashion then
create a view to do that. Also, Name is a reserved word, don't use
it...
>
SELECT
No,
NameField,
Phone
FROM
yourTable
ORDER BY
No, NameField, Phone
>
Cheers,
Jason Lepack
On May 29, 12:04 pm, Oonz <arund...@gmail.comwrote:
>
>
>
Quote:
Hi Friends,
>
Quote:
How can we insert records in sorted order
>
Quote:
like consider a table
>
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594
>
Quote:
if i add a new record like this
>
Quote:
2 test2 34454
>
Quote:
it should go in specific order. so that the final table should look
something like this
>
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 34454
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594- Hide quoted text -
>
- Show quoted text -
But actually i want to do further processing with that sorted table.
Thats why i am in need of such structure

Thanks
Arunkumar.D

Jason Lepack
Guest
 
Posts: n/a
#4: May 29 '07

re: sorting table while inserting


What exactly do you want to do? Maybe there is a better way of doing
it that you haven't come across.

Give a little more detail and more help can be given.

Cheers,
Jason Lepack

On May 29, 12:24 pm, Oonz <arund...@gmail.comwrote:
Quote:
On May 29, 9:19 pm, Jason Lepack <jlep...@gmail.comwrote:
>
>
>
>
>
Quote:
Tables don't store data in a logical order. They store data in a
physical order. If you want to see data in an ordered fashion then
create a view to do that. Also, Name is a reserved word, don't use
it...
>
Quote:
SELECT
No,
NameField,
Phone
FROM
yourTable
ORDER BY
No, NameField, Phone
>
Quote:
Cheers,
Jason Lepack
On May 29, 12:04 pm, Oonz <arund...@gmail.comwrote:
>
Quote:
Quote:
Hi Friends,
>
Quote:
Quote:
How can we insert records in sorted order
>
Quote:
Quote:
like consider a table
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594
>
Quote:
Quote:
if i add a new record like this
>
Quote:
Quote:
2 test2 34454
>
Quote:
Quote:
it should go in specific order. so that the final table should look
something like this
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 34454
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594- Hide quoted text -
>
Quote:
- Show quoted text -
>
But actually i want to do further processing with that sorted table.
Thats why i am in need of such structure
>
Thanks
Arunkumar.D- Hide quoted text -
>
- Show quoted text -

Oonz
Guest
 
Posts: n/a
#5: May 29 '07

re: sorting table while inserting


On May 29, 9:27 pm, Jason Lepack <jlep...@gmail.comwrote:
Quote:
What exactly do you want to do? Maybe there is a better way of doing
it that you haven't come across.
>
Give a little more detail and more help can be given.
>
Cheers,
Jason Lepack
>
On May 29, 12:24 pm, Oonz <arund...@gmail.comwrote:
>
>
>
Quote:
On May 29, 9:19 pm, Jason Lepack <jlep...@gmail.comwrote:
>
Quote:
Quote:
Tables don't store data in a logical order. They store data in a
physical order. If you want to see data in an ordered fashion then
create a view to do that. Also, Name is a reserved word, don't use
it...
>
Quote:
Quote:
SELECT
No,
NameField,
Phone
FROM
yourTable
ORDER BY
No, NameField, Phone
>
Quote:
Quote:
Cheers,
Jason Lepack
On May 29, 12:04 pm, Oonz <arund...@gmail.comwrote:
>
Quote:
Quote:
Hi Friends,
>
Quote:
Quote:
How can we insert records in sorted order
>
Quote:
Quote:
like consider a table
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594
>
Quote:
Quote:
if i add a new record like this
>
Quote:
Quote:
2 test2 34454
>
Quote:
Quote:
it should go in specific order. so that the final table should look
something like this
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 34454
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594- Hide quoted text -
>
Quote:
Quote:
- Show quoted text -
>
Quote:
But actually i want to do further processing with that sorted table.
Thats why i am in need of such structure
>
Quote:
Thanks
Arunkumar.D- Hide quoted text -
>
Quote:
- Show quoted text -- Hide quoted text -
>
- Show quoted text -

Actually i will combine the multiple numbers into one single record

the temporary table structure would be like this

No Name Phone FinalPhone
1 test1 12345 12345
1 test1 23455 12345<br23455
2 test2 68638 68638
2 test2 34454 68638<br34454<br>
2 test2 45445 68638<br34454<br45445
3 test3 67684 67684
4 test4 54808 54808
4 test4 74594 54808<br74594


and by using GROUP BY clause i would select single record having all
the
information


No Name FinalPhone
1 test1 12345<br23455
2 test2 68638<br34454<br45445
3 test3 67684
4 test4 54808<br74594

this view would be sent to UI for display...

Thanks
Arunkumar.D

Ed Murphy
Guest
 
Posts: n/a
#6: May 29 '07

re: sorting table while inserting


Jason Lepack wrote:
Quote:
What exactly do you want to do? Maybe there is a better way of doing
it that you haven't come across.
More specifically, it sounds like he (like many others) is stuck on
procedural rather than functional thinking. Beware the frumious CURSOR!
Quote:
Give a little more detail and more help can be given.
Agreed.
Ed Murphy
Guest
 
Posts: n/a
#7: May 29 '07

re: sorting table while inserting


Oonz wrote:
Quote:
Actually i will combine the multiple numbers into one single record
>
the temporary table structure would be like this
>
No Name Phone FinalPhone
1 test1 12345 12345
1 test1 23455 12345<br23455
2 test2 68638 68638
2 test2 34454 68638<br34454<br>
2 test2 45445 68638<br34454<br45445
3 test3 67684 67684
4 test4 54808 54808
4 test4 74594 54808<br74594
Add a DateInserted column, and use it in sorting.

If you delete the row with Phone = 34454, do you want to have to also
update the row with 45445 so that FinalPhone = 68638<br>45445? Of
course not - that would be a maintenance nightmare. Move FinalPhone
from the database to the UI layer, or at least from the table to a view.
Jason Lepack
Guest
 
Posts: n/a
#8: May 29 '07

re: sorting table while inserting


I created two tables and a trigger and I have all the functionality
that you wanted, without having to create a cursor. The key is to let
the database do the work and this way, any record that validly gets
inserted into the phone_numbers table automatically gets put into the
phone_output list.

If you expect to be deleting or modifying records from the
phone_numbers table then you will need to add update and delete
triggers. (Note: for delete, use the replace function)

If you need more help, just post back.

Cheers,
Jason Lepack

Try this:

-- Begin SQL
CREATE TABLE [dbo].[phone_numbers](
[num] [int] NOT NULL,
[phone_name] [varchar](50) NOT NULL,
[phone] [varchar](50) NOT NULL
) ON [PRIMARY]
GO

CREATE UNIQUE NONCLUSTERED INDEX [nat_key] ON [dbo].[phone_numbers]
(
[num] ASC,
[phone] ASC
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[phone_output](
[num] [int] NOT NULL,
[phone_name] [nvarchar](50) NOT NULL,
[final_phone] [varchar](max) NULL
) ON [PRIMARY]
GO

CREATE TRIGGER [dbo].[update_final_phone]
ON dbo.phone_numbers
AFTER INSERT
AS
BEGIN
insert into
phone_output(num, phone_name)
select distinct
i.num,
i.phone_name
from
inserted i
left outer join phone_output p
on i.num = p.num
where
p.num is null

update
phone_output
set
final_phone = coalesce(final_phone + '<br>','') + phone
from
inserted i
where
phone_output.num = i.num
END
GO

insert into phone_numbers (num,phone_name,phone) values
(1,'test1','12345')
insert into phone_numbers (num,phone_name,phone) values
(1,'test1','23455')
insert into phone_numbers (num,phone_name,phone) values
(2,'test2','68638')
insert into phone_numbers (num,phone_name,phone) values
(3,'test3','67684')
insert into phone_numbers (num,phone_name,phone) values
(4,'test4','54808')
insert into phone_numbers (num,phone_name,phone) values
(4,'test4','74594')
go

select * from phone_numbers
select * from phone_output
-- End SQL

On May 29, 12:42 pm, Oonz <arund...@gmail.comwrote:
Quote:
On May 29, 9:27 pm, Jason Lepack <jlep...@gmail.comwrote:
>
>
>
>
>
Quote:
What exactly do you want to do? Maybe there is a better way of doing
it that you haven't come across.
>
Quote:
Give a little more detail and more help can be given.
>
Quote:
Cheers,
Jason Lepack
>
Quote:
On May 29, 12:24 pm, Oonz <arund...@gmail.comwrote:
>
Quote:
Quote:
On May 29, 9:19 pm, Jason Lepack <jlep...@gmail.comwrote:
>
Quote:
Quote:
Tables don't store data in a logical order. They store data in a
physical order. If you want to see data in an ordered fashion then
create a view to do that. Also, Name is a reserved word, don't use
it...
>
Quote:
Quote:
SELECT
No,
NameField,
Phone
FROM
yourTable
ORDER BY
No, NameField, Phone
>
Quote:
Quote:
Cheers,
Jason Lepack
On May 29, 12:04 pm, Oonz <arund...@gmail.comwrote:
>
Quote:
Quote:
Hi Friends,
>
Quote:
Quote:
How can we insert records in sorted order
>
Quote:
Quote:
like consider a table
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594
>
Quote:
Quote:
if i add a new record like this
>
Quote:
Quote:
2 test2 34454
>
Quote:
Quote:
it should go in specific order. so that the final table should look
something like this
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 34454
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594- Hide quoted text -
>
Quote:
Quote:
- Show quoted text -
>
Quote:
Quote:
But actually i want to do further processing with that sorted table.
Thats why i am in need of such structure
>
Quote:
Quote:
Thanks
Arunkumar.D- Hide quoted text -
>
Quote:
Quote:
- Show quoted text -- Hide quoted text -
>
Quote:
- Show quoted text -
>
Actually i will combine the multiple numbers into one single record
>
the temporary table structure would be like this
>
No Name Phone FinalPhone
1 test1 12345 12345
1 test1 23455 12345<br23455
2 test2 68638 68638
2 test2 34454 68638<br34454<br>
2 test2 45445 68638<br34454<br45445
3 test3 67684 67684
4 test4 54808 54808
4 test4 74594 54808<br74594
>
and by using GROUP BY clause i would select single record having all
the
information
>
No Name FinalPhone
1 test1 12345<br23455
2 test2 68638<br34454<br45445
3 test3 67684
4 test4 54808<br74594
>
this view would be sent to UI for display...
>
Thanks
Arunkumar.D- Hide quoted text -
>
- Show quoted text -

Erland Sommarskog
Guest
 
Posts: n/a
#9: May 29 '07

re: sorting table while inserting


Oonz (arundhaj@gmail.com) writes:
Quote:
Actually i will combine the multiple numbers into one single record
>
the temporary table structure would be like this
>
No Name Phone FinalPhone
1 test1 12345 12345
1 test1 23455 12345<br23455
2 test2 68638 68638
2 test2 34454 68638<br34454<br>
2 test2 45445 68638<br34454<br45445
3 test3 67684 67684
4 test4 54808 54808
4 test4 74594 54808<br74594
>
>
and by using GROUP BY clause i would select single record having all the
information
>
>
No Name FinalPhone
1 test1 12345<br23455
2 test2 68638<br34454<br45445
3 test3 67684
4 test4 54808<br74594
>
this view would be sent to UI for display...
GROUP BY is not your guy, in this case. See this link for some ideas on
to produce concatenated lists:
http://www.projectdmx.com/tsql/rowconcatenate.aspx


--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pro...ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinf...ons/books.mspx
Jason Lepack
Guest
 
Posts: n/a
#10: May 30 '07

re: sorting table while inserting


I created delete and update triggers... here's the complete ddl.

CREATE TABLE [dbo].[phone_numbers](
[num] [int] NOT NULL,
[phone_name] [varchar](50) NOT NULL,
[phone] [varchar](50) NOT NULL
) ON [PRIMARY]
GO


CREATE UNIQUE NONCLUSTERED INDEX [nat_key] ON [dbo].[phone_numbers]
(
[num] ASC,
[phone] ASC
) ON [PRIMARY]
GO


CREATE TABLE [dbo].[phone_output](
[num] [int] NOT NULL,
[phone_name] [nvarchar](50) NOT NULL,
[final_phone] [varchar](max) NULL
) ON [PRIMARY]
GO


CREATE TRIGGER [dbo].[insert_final_phone]
ON dbo.phone_numbers
AFTER INSERT
AS
BEGIN
insert into
phone_output(num, phone_name)
select distinct
i.num,
i.phone_name
from
inserted i
left outer join phone_output p
on i.num = p.num
where
p.num is null


update
phone_output
set
final_phone = coalesce(final_phone + '<br>','') +
phone
from
inserted i
where
phone_output.num = i.num
END
GO

CREATE TRIGGER [dbo].[delete_final_phone]
ON dbo.phone_numbers
AFTER DELETE
AS
BEGIN
update
phone_output
set
final_phone = replace(final_phone, d.phone+'<br>', '')
from
deleted d
where
phone_output.num = d.num

update
phone_output
set
final_phone = replace(final_phone, d.phone, '')
from
deleted d
where
phone_output.num = d.num

delete phone_output
where final_phone = ''
END
GO

CREATE TRIGGER [dbo].[update_final_phone]
ON dbo.phone_numbers
AFTER UPDATE
AS
BEGIN
update
phone_output
set
final_phone = replace(final_phone, d.phone+'<br>', '')
from
deleted d
where
phone_output.num = d.num

update
phone_output
set
final_phone = replace(final_phone, d.phone, '')
from
deleted d
where
phone_output.num = d.num

delete phone_output
where final_phone = ''

insert into
phone_output(num, phone_name)
select distinct
i.num,
i.phone_name
from
inserted i
left outer join phone_output p
on i.num = p.num
where
p.num is null


update
phone_output
set
final_phone = coalesce(final_phone + '<br>','') +
phone
from
inserted i
where
phone_output.num = i.num
END
GO

insert into phone_numbers (num,phone_name,phone) values
(1,'test1','12345')
insert into phone_numbers (num,phone_name,phone) values
(1,'test1','23455')
insert into phone_numbers (num,phone_name,phone) values
(1,'test1','68638')
insert into phone_numbers (num,phone_name,phone) values
(3,'test3','67684')
insert into phone_numbers (num,phone_name,phone) values
(4,'test4','54808')
insert into phone_numbers (num,phone_name,phone) values
(4,'test4','74594')
go

delete phone_numbers where num = 1 and phone = '23455'
delete phone_numbers where num = 3
go

update phone_numbers set num = 2 where phone = '54808'
update phone_numbers set phone = '7686' where phone = '12345'
go



On May 29, 2:01 pm, Jason Lepack <jlep...@gmail.comwrote:
Quote:
I created two tables and a trigger and I have all the functionality
that you wanted, without having to create a cursor. The key is to let
the database do the work and this way, any record that validly gets
inserted into the phone_numbers table automatically gets put into the
phone_output list.
>
If you expect to be deleting or modifying records from the
phone_numbers table then you will need to add update and delete
triggers. (Note: for delete, use the replace function)
>
If you need more help, just post back.
>
Cheers,
Jason Lepack
>
Try this:
>
-- Begin SQL
CREATE TABLE [dbo].[phone_numbers](
[num] [int] NOT NULL,
[phone_name] [varchar](50) NOT NULL,
[phone] [varchar](50) NOT NULL
) ON [PRIMARY]
GO
>
CREATE UNIQUE NONCLUSTERED INDEX [nat_key] ON [dbo].[phone_numbers]
(
[num] ASC,
[phone] ASC
) ON [PRIMARY]
GO
>
CREATE TABLE [dbo].[phone_output](
[num] [int] NOT NULL,
[phone_name] [nvarchar](50) NOT NULL,
[final_phone] [varchar](max) NULL
) ON [PRIMARY]
GO
>
CREATE TRIGGER [dbo].[update_final_phone]
ON dbo.phone_numbers
AFTER INSERT
AS
BEGIN
insert into
phone_output(num, phone_name)
select distinct
i.num,
i.phone_name
from
inserted i
left outer join phone_output p
on i.num = p.num
where
p.num is null
>
update
phone_output
set
final_phone = coalesce(final_phone + '<br>','') + phone
from
inserted i
where
phone_output.num = i.num
END
GO
>
insert into phone_numbers (num,phone_name,phone) values
(1,'test1','12345')
insert into phone_numbers (num,phone_name,phone) values
(1,'test1','23455')
insert into phone_numbers (num,phone_name,phone) values
(2,'test2','68638')
insert into phone_numbers (num,phone_name,phone) values
(3,'test3','67684')
insert into phone_numbers (num,phone_name,phone) values
(4,'test4','54808')
insert into phone_numbers (num,phone_name,phone) values
(4,'test4','74594')
go
>
select * from phone_numbers
select * from phone_output
-- End SQL
>
On May 29, 12:42 pm, Oonz <arund...@gmail.comwrote:
>
>
>
Quote:
On May 29, 9:27 pm, Jason Lepack <jlep...@gmail.comwrote:
>
Quote:
Quote:
What exactly do you want to do? Maybe there is a better way of doing
it that you haven't come across.
>
Quote:
Quote:
Give a little more detail and more help can be given.
>
Quote:
Quote:
Cheers,
Jason Lepack
>
Quote:
Quote:
On May 29, 12:24 pm, Oonz <arund...@gmail.comwrote:
>
Quote:
Quote:
On May 29, 9:19 pm, Jason Lepack <jlep...@gmail.comwrote:
>
Quote:
Quote:
Tables don't store data in a logical order. They store data in a
physical order. If you want to see data in an ordered fashion then
create a view to do that. Also, Name is a reserved word, don't use
it...
>
Quote:
Quote:
SELECT
No,
NameField,
Phone
FROM
yourTable
ORDER BY
No, NameField, Phone
>
Quote:
Quote:
Cheers,
Jason Lepack
On May 29, 12:04 pm, Oonz <arund...@gmail.comwrote:
>
Quote:
Quote:
Hi Friends,
>
Quote:
Quote:
How can we insert records in sorted order
>
Quote:
Quote:
like consider a table
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594
>
Quote:
Quote:
if i add a new record like this
>
Quote:
Quote:
2 test2 34454
>
Quote:
Quote:
it should go in specific order. so that the final table should look
something like this
>
Quote:
Quote:
No Name Phone
1 test1 12345
1 test1 23455
2 test2 34454
2 test2 68638
3 test3 67684
4 test4 54808
4 test4 74594- Hide quoted text -
>
Quote:
Quote:
- Show quoted text -
>
Quote:
Quote:
But actually i want to do further processing with that sorted table.
Thats why i am in need of such structure
>
Quote:
Quote:
Thanks
Arunkumar.D- Hide quoted text -
>
Quote:
Quote:
- Show quoted text -- Hide quoted text -
>
Quote:
Quote:
- Show quoted text -
>
Quote:
Actually i will combine the multiple numbers into one single record
>
Quote:
the temporary table structure would be like this
>
Quote:
No Name Phone FinalPhone
1 test1 12345 12345
1 test1 23455 12345<br23455
2 test2 68638 68638
2 test2 34454 68638<br34454<br>
2 test2 45445 68638<br34454<br45445
3 test3 67684 67684
4 test4 54808 54808
4 test4 74594 54808<br74594
>
Quote:
and by using GROUP BY clause i would select single record having all
the
information
>
Quote:
No Name FinalPhone
1 test1 12345<br23455
2 test2 68638<br34454<br45445
3 test3 67684
4 test4 54808<br74594
>
Quote:
this view would be sent to UI for display...
>
Quote:
Thanks
Arunkumar.D- Hide quoted text -
>
Quote:
- Show quoted text -- Hide quoted text -
>
- Show quoted text -

Closed Thread


Similar Microsoft SQL Server bytes