Let's say you have a table that looks something like this:
CREATE TABLE [Source_Vertical](
[ID] [int] IDENTITY(1,1) NOT NULL,
[GroupID] [int] NOT NULL,
[Col1_Group] [varchar](50) NULL,
[Col2_Group] [varchar](50) NULL,
[Col1_Individual] [varchar](50) NULL,
[Col2_Individual] [varchar](50) NULL)
You don't know how many rows there are for each GroupID and your job is to generate a list that contains all values associated with a given GroupID in a single row. Here is a simple way to do it:
First: create a target table that looks something like this:
CREATE TABLE [Target_Horizontal](
[GroupID] [int] NOT NULL,
[GroupValues] [varchar](max) NULL)
Next copy, adjust based on your needs and execute the following simple script (note I used a vertical line as a value separator - you can use whatever you need, just make sure the character you choose does not exist inside the actual values of the columns):
DECLARE @GroupID int
DECLARE @GroupID_Current int
DECLARE @Col1_Group varchar(50)
DECLARE @Col2_Group varchar(50)
DECLARE @Col1_Individual varchar(50)
DECLARE @Col2_Individual varchar(50)
DECLARE list_cursor CURSOR
FOR SELECT * FROM dbo.Source_Vertical ORDER BY GroupID
OPEN list_cursor
FETCH NEXT FROM list_cursor INTO
@GroupID,
@Col1_Group,
@Col2_Group,
@Col1_Individual,
@Col2_Individual
SET @GroupID_Current = ''
WHILE @@FETCH_STATUS = 0
BEGIN
IF @GroupID_Current <> @GroupID
BEGIN
INSERT INTO Target_Horizontal (Id, GroupValues) VALUES(@GroupID, @Col1_Group + '|' + @Col2_Group + '|' + @Col1_Individual + '|' + @Col2_Individual)
SET @GroupID_Current = @GroupID
END
ELSE
BEGIN
UPDATE Target_Horizontal SET GroupValues = GroupValues + '|' + @Col1_Individual + '|' + @Col2_Individual WHERE GroupID = @GroupID
END
FETCH NEXT FROM list_cursor INTO
@GroupID,
@Col1_Group,
@Col2_Group,
@Col1_Individual,
@Col2_Individual
END
CLOSE list_cursor;
DEALLOCATE list_cursor;
Finally you can take the results from the target table and dump them on Excel or wherever you need to. Hope this helps someone!
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment