all groups > sql server (alternate) > may 2007 >
You're in the

sql server (alternate)

group:

sorting table while inserting


sorting table while inserting Oonz
5/29/2007 9:04:02 AM
sql server (alternate):
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 Jason Lepack
5/29/2007 9:19:27 AM
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
[quoted text, click to view]

Re: sorting table while inserting Oonz
5/29/2007 9:24:13 AM
[quoted text, click to view]

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 Jason Lepack
5/29/2007 9:27:12 AM
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

[quoted text, click to view]

Re: sorting table while inserting Ed Murphy
5/29/2007 9:41:51 AM
[quoted text, click to view]

More specifically, it sounds like he (like many others) is stuck on
procedural rather than functional thinking. Beware the frumious CURSOR!

[quoted text, click to view]

Re: sorting table while inserting Oonz
5/29/2007 9:42:30 AM
[quoted text, click to view]


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<br> 23455
2 test2 68638 68638
2 test2 34454 68638<br> 34454<br>
2 test2 45445 68638<br> 34454<br> 45445
3 test3 67684 67684
4 test4 54808 54808
4 test4 74594 54808<br> 74594


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


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

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

Thanks
Arunkumar.D
Re: sorting table while inserting Ed Murphy
5/29/2007 10:51:27 AM
[quoted text, click to view]

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
Re: sorting table while inserting Jason Lepack
5/29/2007 11:01:07 AM
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

[quoted text, click to view]

Re: sorting table while inserting Erland Sommarskog
5/29/2007 9:26:55 PM
Oonz (arundhaj@gmail.com) writes:
[quoted text, click to view]

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/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
Re: sorting table while inserting Jason Lepack
5/30/2007 6:33:55 AM
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



[quoted text, click to view]
AddThis Social Bookmark Button