Hi,
I have table which has the following values :
ID SEQ Text
1 1 A
2 1 B
3 2 C
4 2 D
5 2 E
6 2 F
7 3 G
The result should be :
1 AB
2 CDEF
3 G
Could somebody help me with this? I could use an cursor but the table
could be large and i want a fast solution.
Thanx in advance...
Hennie 6 2043
Hennie7863 (hd********@hotmail.com) writes: I have table which has the following values :
ID SEQ Text 1 1 A 2 1 B 3 2 C 4 2 D 5 2 E 6 2 F 7 3 G
The result should be :
1 AB 2 CDEF 3 G
Could somebody help me with this? I could use an cursor but the table could be large and i want a fast solution.
Unfortunately, if you are on SQL 2000, the cursor is the only
reliable solution. There are tricks with SELECT and UPDATE but
they rely on undefined behaviour, and I would encourge use of them.
On SQL 2005 there is some XML functionality, that solves this problem,
as show in this small demo:
select CustomerID,
substring(OrdIdList, 1, datalength(OrdIdList)/2 - 1)
-- strip the last ',' from the list
from
Customers c cross apply
(select convert(nvarchar(30), OrderID) + ',' as [text()]
from Orders o
where o.CustomerID = c.CustomerID
order by o.OrderID
for xml path('')) as Dummy(OrdIdList)
go
--
Erland Sommarskog, SQL Server MVP, es****@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
Hi Erland,
I'm stil working SQL Server 2000. In 2006 i'll starting with SQL Server
2005. From an earlier item i founded the following (not fully
supported) :
Select
c.Seq ,
[Text],
identity(int,1,1) as i
into #T
from Concat C
select Seq,identity(int,1,1) as i
into #Cursor
from #T
group by Seq
declare @i int, @text varchar(8000)
set @i=1
while exists(select * from #cursor where i=@i)
begin
set @text=''
update #T
set @text= [Text] = @text + ' ' + [Text]
where Seq = (select Seq from #cursor where i=@i)
Select * from #T
set @i=@i+1
end
select a.seq,right([text],len([text])-1) as textt
from #T as a
join (select seq, max(i) as i from #T group by seq ) as b on a.i=b.i
But as i read the post you said that this was not a rightful way to do
this so i searched further for a better solution and i found on SQL
Team :
DECLARE @TextList Varchar(100)
SELECT @TextList = COALESCE(@TextList + ' ', '') + CAST(Text AS
varchar(8000)) FROM <Table> WHERE Seq = @iSeq
RETURN (@TextList)
The only problem i've is that i am using this in a function and i want
to build <table> dynamically. I have to use a function because i'm
using this in a query, like this:
SELECT
...
GET_ConcatString(seq)
...
From
....
But you can't build dynamic strings in function because of
blabladiebladiebla.
Thanx
Hennie
Hi Erland,
I'm stil working SQL Server 2000. In 2006 i'll starting with SQL Server
2005. From an earlier item i founded the following (not fully
supported) :
Select
c.Seq ,
[Text],
identity(int,1,1) as i
into #T
from Concat C
select Seq,identity(int,1,1) as i
into #Cursor
from #T
group by Seq
declare @i int, @text varchar(8000)
set @i=1
while exists(select * from #cursor where i=@i)
begin
set @text=''
update #T
set @text= [Text] = @text + ' ' + [Text]
where Seq = (select Seq from #cursor where i=@i)
Select * from #T
set @i=@i+1
end
select a.seq,right([text],len([text])-1) as textt
from #T as a
join (select seq, max(i) as i from #T group by seq ) as b on a.i=b.i
But as i read the post you said that this was not a rightful way to do
this so i searched further for a better solution and i found on SQL
Team :
DECLARE @TextList Varchar(100)
SELECT @TextList = COALESCE(@TextList + ' ', '') + CAST(Text AS
varchar(8000)) FROM <Table> WHERE Seq = @iSeq
RETURN (@TextList)
The only problem i've is that i am using this in a function and i want
to build <table> dynamically. I have to use a function because i'm
using this in a query, like this:
SELECT
...
GET_ConcatString(seq)
...
From
....
But you can't build dynamic strings in function because of
blabladiebladiebla.
Thanx
Hennie
Hennie7863 (hd********@hotmail.com) writes: But as i read the post you said that this was not a rightful way to do this so i searched further for a better solution and i found on SQL Team :
DECLARE @TextList Varchar(100)
SELECT @TextList = COALESCE(@TextList + ' ', '') + CAST(Text AS varchar(8000)) FROM <Table> WHERE Seq = @iSeq
RETURN (@TextList)
The only problem i've is that i am using this in a function and i want to build <table> dynamically. I have to use a function because i'm using this in a query, like this:
This too is a solution which depends on undefined behaviour. See http://support.microsoft.com/default.aspx?scid=287515. This article
is somewhat schizofrenic, since it first says "The correct behavior for an
aggregate concatenation query is undefined." and then goes showing when
it may work after all. Personally, I prefer to not rely on it at all.
--
Erland Sommarskog, SQL Server MVP, es****@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
try with this
you also can use table variable without using #temp table.
create table tab001
(
id int,
SEQ int,
txt char(1)
)
insert into tab001 values (1,1,'A')
insert into tab001 values (2,1,'B')
insert into tab001 values (3,2,'C')
insert into tab001 values (4,2,'D')
insert into tab001 values (5,2,'E')
insert into tab001 values (6,3,'F')
insert into tab001 values (7,3,'G')
create table #tem
(
id int
)
create table #temmData
(
id int,
txtAll varchar(200)
)
insert #tem select Distinct SEQ from tab001
Declare @tSEQ int
DECLARE t_cursor CURSOR FOR
select id from #tem
declare @Notes varchar(4000)
OPEN t_cursor
FETCH NEXT FROM t_cursor INTO @tSEQ
IF @@FETCH_STATUS <> 0
print 'no ID found'
WHILE @@FETCH_STATUS = 0
BEGIN
Select @Notes = ''
Select @Notes = @Notes + ' ' + txt From tab001 Where SEQ = @tSEQ order by ID DESC
print @Notes
insert into #temmData values (@tSEQ, @Notes)
FETCH NEXT FROM t_cursor INTO @tSEQ
END
select * from #temmData
CLOSE t_cursor
DEALLOCATE t_cursor
Hennie7863 wrote: Hi,
I have table which has the following values :
ID SEQ Text 1 1 A 2 1 B 3 2 C 4 2 D 5 2 E 6 2 F 7 3 G
The result should be :
1 AB 2 CDEF 3 G
Could somebody help me with this? I could use an cursor but the table could be large and i want a fast solution.
Thanx in advance...
Hennie
Well Erland, Thanx for the reply. Hmmm and i thought i found a better
solution than the one shown in my earlier post. Great! I do not like a
cursor in a function, specially when the table is very large. I think
that i'm gone use the function anyway and when i convert the function
to 2005 i will use your other suggestion to implement in this function.
Greetz,
Hennie This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: dont bother |
last post by:
Hey,
I have these attributes:
index
which is a numerical value value
vector
which is a numerical float value
and I want to concatenate like this:
|
by: Juan |
last post by:
Does any one know if there are reported bugs when concatenating strings?
When debugging each variable has the correct value but when I try to
concatenate them some values are missing (I can´t see...
|
by: ebobnar |
last post by:
I need to call the function LoadImage which take a LPCTSTR argument to
specify the path to the image to load. However, I need to create this
path dynamically from user input by concatenating...
|
by: FB's .NET Dev PC |
last post by:
Interesting note, the code below as is will attempt to cast what is clearly
indicated as a string into a double. This is becuase the use of + as a
concatenation operator. The error message...
|
by: lindiwemaduna |
last post by:
I want to concatenate values of two text boxes into one string but these should be separated by a space in the database table. i have tried all the following but twas not successful:
Dim fullName...
|
by: c |
last post by:
Hi everybody.
I'm working on converting a program wriiten on perl to C, and facing a
problem with concatenate strings.
Now here is a small program that descripe the problem, if you help me
to...
|
by: Neil |
last post by:
Using the MS Rich Textbox Control 6.0 in Access 2000, I need to concatenate
several RTB controls into a single RTF file. Sometimes two strings will be
side-by-side; other times they need to be...
|
by: Big Brother |
last post by:
I've been thinking about the seemingly simple task of writing a
va_arg-type function to concatenate arbitarily many strings.
My first thoughts violated the following principles:
1) never...
|
by: clinisbut |
last post by:
I'm not sure if this is the right group, but I didn't found any other
more appropiate to post my problem.
I'm trying to concatenate chars using the Glib library and I'm getting
strange...
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
| |