June 3, 2002 at 11:40 am
Has anyone managed to aggregate varchar data like this.
id name
--------------
1 John
1 Steve
1 Lars
1 Sven
id name
-----------------------------
1 John, Steve, Lars, Sven
I'm missing a summarizing function for text fields in SQL Server.
Any help will be greatly appreciated.
Regards,
Jonas
June 3, 2002 at 7:30 pm
The is a real elegant way of doing it and very flexible. I use it quite a bit to return detailed messages and also to create T-Sql which has varying columns (eg pivot tables).
declare @STR varchar(1000)
select @STR = coalesce(@str,'') + ColName + ', '
from tablename
select @STR
Hope that helps
cheers,
Mike
June 3, 2002 at 7:41 pm
Same as previous except extended a bit, was doing when other came thru so didn't see.
This is a concept piece so I really haven't tested, but should be sound.
DECLARE @ctrlLoop int
DECLARE @maxLoop int
DECLARE @pivname varchar(8000)
CREATE TABLE #tmpOutput (
[unid] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[curid] [int] NOT NULL,
[pivname] [varchar](8000) NULL
)
/*
Note: do not use GO as it will cause the temp table to go out of scope.
*/
--Prebuild our temp table with control data.
INSERT INTO #tmpOutput (curid) SELECT DISTINCT [id] FROM urTbl
--Set main variables
SET @ctrlLoop = 0
SET @maxLoop = MAX(unid) FROM #tmpOutput
WHILE @ctrlLoop < @maxLoop
BEGIN
SET @ctrlLoop = @ctrlLoop + 1 --prepare to move thru data
--Preset @pivname to blank
SET @pivname = ''
--All data will be concatinated together into single variable.
SELECT @pivname = @pivname + (CASE WHEN LEN(@pivname) > 0 THEN ',' END) + [name]
FROM urTbl WHERE [id] IN (SELECT curid FROM #tmpOutput WHERE unid = @ctrlLoop)
--Update pivname value for temp table based on curid.
UPDATE #tmpOutput SET pivname = @pivname WHERE unid = ctrlLoop
END
SELECT curid, pivname FROM #tmpOutput
/*
Note: At this point you could output to a permanent table so you don't have to redo every time. And even make a trigger to keep updated.
*/
DROP TABLE #tmpOutput
"Don't roll your eyes at me. I will tape them in place." (Teacher on Boston Public)
Edited by - antares686 on 06/03/2002 7:42:19 PM
June 4, 2002 at 5:54 am
Thanks for the help.
I tried the first example (because it looked simple) but how do I incorporate
declare @STR varchar(1000)
select @STR = coalesce(@str,'') + name + ', '
from tbl
select @STR
...into one query where I want to summarize many ids. Creating and updating a separate table with the information is not the ideal solution for me.
/Jonas
June 4, 2002 at 6:13 am
You can't without many variables and unions to join them when done or doing as I suggested with the temp table to summarize the data. I only suggest use a permanent table in case this will run often so that you do not have to query this repeatedly, thus cutting down on server overhead.
"Don't roll your eyes at me. I will tape them in place." (Teacher on Boston Public)
Viewing 5 posts - 1 through 4 (of 4 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy