sorting table while inserting | | |
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 | | | | 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
| | | | 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:
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:
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 | | | | 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:
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:
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 -
| | | | 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:
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:
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 | | | | 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. | | | | 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. | | | | 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:
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:
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 -
| | | | 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 | | | | 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:
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:
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 -
|  | Similar Microsoft SQL Server bytes | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,358 network members.
|