| Author | 
                                
                                 Topic  | 
                             
                            
                                    | 
                                         Harry C 
                                        Posting Yak  Master 
                                         
                                        
                                        148 Posts  | 
                                        
                                        
                                            
                                            
                                             Posted - 2010-04-02 : 19:37:55
                                            
  | 
                                             
                                            
                                            I have data that comes out to me like this...THIS IS JUST AN EXAMPLE so you can see the data. If you run both SQL statements you will see what I get, then what I want. There is no fixed number of items per RegID, so I cannot hard code anything.SELECT 1 as RegID, 'Water' as Name, '2.00' as Fee, '3' as Quantity, NULL as QuestionUNION ALLSELECT 1 as RegID,'Food' as Name, '5.00' as Fee, '2' as Quantity, NULL as QuestionUNION ALLSELECT 1 as RegID, NULL, NULL,NULL,'My Name is Bob' as Question1UNION ALLSELECT 1 as RegID, NULL, NULL,NULL,'I like to swim' as Question2 I am trying to find a way to retrieve it like thisSELECT 1 as RegID, 'Water' as Name, '2.00' as Fee, '3' as Quantity,'Food' as Name, '5.00' as Fee, '2' as Quantity,'My Name is Bob' as Question1,'I like to swim' as Question2 If someone would be able to show me an example of how I can get data like this, it would be awesome. I have heard about CROSS and Outer Apply, but I was never able to get it to work...If someone is really crazy, here is my DDL if you my actual tables and fields. Thanks so much for taking a lookCREATE TABLE [dbo].[#Registration](        [Guid] [uniqueidentifier] NOT NULL,        [AccountGuid] [uniqueidentifier] NOT NULL,        [RaceGuid] [uniqueidentifier] NOT NULL,        [Date] [datetime] NULL,        [TotalFee] [money] NOT NULL,        [WaiverInitials] [nvarchar](50) NULL,        [OnlineFee] [money] NOT NULL,        [PayByCheck] [bit] NOT NULL,        [IsPaid] [bit] NOT NULL,        [PaperRegistration] [bit] NOT NULL        )                INSERT INTO #Registration         SELECT '7ef8b580-5166-4ae2-b1fb-447d15f50bc5',  '914a0a9e-0b3c-46e3-ad96-8920717d8081', '04010abc-83dd-4aaf-abb1-0177eac5d562'        ,'2010-02-10 10:59:46.490', 2047.9950,  'HC',   0.0000, 0,      1,      0                CREATE TABLE [dbo].[#Event](        [Guid] [uniqueidentifier] NOT NULL,        [RaceGuid] [uniqueidentifier] NOT NULL,        [Name] [nvarchar](200) NOT NULL,        [Fee] [money] NOT NULL,        [IsRelay] [bit] NOT NULL,        [MaxEntrants] [int] NOT NULL,        [FromDate] [date] NULL,        [ToDate] [date] NULL,        [DisplayOrder] [int] NOT NULL,        [Deleted] [bit] NOT NULL,        [Disabled] [bit] NOT NULL        )                INSERT INTO #Event        SELECT 'ba5dcb0c-b726-4f76-bdc0-1bffe6ca6697',  '04010abc-83dd-4aaf-abb1-0177eac5d562', 'Test Relay Event',     125.0000,       1,      4,      NULL,   NULL,   2,      0,      0        UNION ALL        SELECT '75843b81-662e-4b1f-b73e-2e3dd8be184e',  '04010abc-83dd-4aaf-abb1-0177eac5d562', 'Triathlon Boot Camp',  575.0000,       0,      100     ,NULL,  NULL,   0,      0,      0                CREATE TABLE [dbo].[#Athlete](        [Guid] [uniqueidentifier] NOT NULL,        [AccountGuid] [uniqueidentifier] NOT NULL,        [Firstname] [nvarchar](50) NOT NULL,        [Middlename] [nvarchar](50) NULL,        [Lastname] [nvarchar](50) NOT NULL,        [Email] [nvarchar](max) NOT NULL,        [DayPhone] [nvarchar](50) NOT NULL,        [EveningPhone] [nvarchar](50) NOT NULL,        [MobilePhone] [nvarchar](50) NULL,        [Address1] [nvarchar](200) NOT NULL,        [Address2] [nvarchar](200) NULL,        [Address3] [nvarchar](200) NULL,        [City] [nvarchar](200) NULL,        [State] [nvarchar](2) NOT NULL,        [Zip] [nvarchar](15) NOT NULL,        [Gender] [nvarchar](50) NULL,        [DateOfBirth] [date] NULL,        [IsAccountOwner] [bit] NOT NULL,        [MedicalConditions] [varchar](500) NULL,        [Country] [nvarchar](150) NULL        )                       INSERT INTO #Athlete        SELECT 'bec2a987-20fd-4279-bd75-528686d0ab7c'        ,       '914a0a9e-0b3c-46e3-ad96-8920717d8081'        ,       'jeremy'        , ''        ,               'T'        ,       'test@lin-mark.com'        ,       '856-555-0010'        ,       '856-555-0010'        ,       '856-555-0010'          ,               '123 test'        ,       '123 Test'                ,       '123 Test'        ,               'Mantua'        ,       'NJ'        ,       '09980'        ,       'M'        ,       '1982-01-26'        ,       0        , 'none'        ,               'United States of America'                CREATE TABLE [dbo].[#RegistrationEvent](        [Guid] [uniqueidentifier] NOT NULL,        [RegistrationGuid] [uniqueidentifier] NOT NULL,        [RaceGuid] [uniqueidentifier] NOT NULL,        [EventGuid] [uniqueidentifier] NULL,        [AthleteGuid] [uniqueidentifier] NOT NULL,        [TShirtSize] [nvarchar](100) NULL,        [Division] [nvarchar](100) NULL,        [IsSelected] [bit] NOT NULL,        [RaceDetailsCompleted] [bit] NOT NULL,        [USATNumber] [nvarchar](9) NULL,        [Paid] [bit] NOT NULL           )                INSERT INTO #RegistrationEvent        SELECT '87c9a8c3-9cd9-4341-8795-b114a26df8f0',  '7ef8b580-5166-4ae2-b1fb-447d15f50bc5', '04010abc-83dd-4aaf-abb1-0177eac5d562', 'ba5dcb0c-b726-4f76-bdc0-1bffe6ca6697'  ,'bec2a987-20fd-4279-bd75-528686d0ab7c',        'small',        '5K Competitve Walk Age Grouper',       1,      1,      NULL,   0CREATE TABLE [dbo].[#RegistrationRelayLeg](        [Guid] [uniqueidentifier] NOT NULL,        [RegistrationGuid] [uniqueidentifier] NOT NULL,        [RegistrationEventGuid] [uniqueidentifier] NOT NULL,        [RelayLegGuid] [uniqueidentifier] NOT NULL,        [AthleteGuid] [uniqueidentifier] NOT NULL,        [LegName] [nvarchar](200) NOT NULL,        [Name] [nvarchar](200) NOT NULL,        [DateOfBirth] [date] NOT NULL,        [USATNumber] [nvarchar](50) NULL,        [AcceptWaiver] [bit] NOT NULL,        [EmergencyContactName] [nvarchar](200) NOT NULL,        [EmergencyContactNumber] [nvarchar](50) NOT NULL,        [EmailAddress] [nvarchar](200) NULL,        [TshirtSize] [nvarchar](50) NULL,        [MedicalConditions] [nvarchar](500) NULL        )                       INSERT INTO #RegistrationRelayLegSELECT '82d030d8-ec2f-4992-92ff-5349b5ffa67d',  '7ef8b580-5166-4ae2-b1fb-447d15f50bc5', '876d80b9-0399-4854-92c2-da0a359dd995', 'bb30f1f6-c358-45c5-849f-0b311c189f0d', 'bec2a987-20fd-4279-bd75-528686d0ab7c', 'Cyclist',      'Cyclist',      '1945-04-04',   NULL,   1,      'test', 'test', 'test', NULL,   'test'UNION ALLSELECT '36a9e472-4fac-456e-ba93-944c9e52d8cb',  '7ef8b580-5166-4ae2-b1fb-447d15f50bc5', '876d80b9-0399-4854-92c2-da0a359dd995', 'a5ddb0ce-b4ed-49e6-954b-a9013cbf9258', 'bec2a987-20fd-4279-bd75-528686d0ab7c', 'Swimmer',      'Swimmer',      '1987-05-03',   NULL,   1,      'none', '555-555-5555', 'hcwork@verizon.net',   NULL,   'none'UNION ALLSELECT '6cc8b51f-299a-44bb-949e-e9a88142abe7',  '7ef8b580-5166-4ae2-b1fb-447d15f50bc5', '876d80b9-0399-4854-92c2-da0a359dd995', 'b6652d7c-c883-4531-bb0d-f4d8a4793da6', 'bec2a987-20fd-4279-bd75-528686d0ab7c', 'Runner',       'Runner',       '1984-01-01',   NULL,   1,      'none', 'none', 'none', NULL,   'none'                  CREATE TABLE [dbo].[#RegistrationQuestion](        [Guid] [uniqueidentifier] NOT NULL,        [RaceGuid] [uniqueidentifier] NOT NULL,        [AthleteGuid] [uniqueidentifier] NOT NULL,        [RegistrationGuid] [uniqueidentifier] NOT NULL,        [QuestionGuid] [uniqueidentifier] NOT NULL,        [QuestionText] [nvarchar](300) NOT NULL,        [QuestionType] [nvarchar](50) NOT NULL,        [QuestionResponse] [nvarchar](1000) NULL,        [DisplayOrder] [int] NOT NULL        )       INSERT INTO #RegistrationQuestionSELECT 'e41befbc-b4d3-4a65-962d-de81cd5a89fd',  '04010abc-83dd-4aaf-abb1-0177eac5d562', 'bec2a987-20fd-4279-bd75-528686d0ab7c', '7ef8b580-5166-4ae2-b1fb-447d15f50bc5', '479bd03e-1478-4c73-a52c-a6aebbed7809', 'Do You Like Tris',     'True/False',   'yes',  1UNION ALLSELECT '003a7f2b-2aea-44a8-aa6e-f10c474cc029',  'c22618ef-d2df-4cb2-9263-df97d0ebb0c2', 'bec2a987-20fd-4279-bd75-528686d0ab7c', '7ef8b580-5166-4ae2-b1fb-447d15f50bc5', 'c5bae87f-ea7c-4438-a88e-f988575c00b2,',        'If You Are Part Of A Team Then Enter Your Team Name (Type NA if not applicable)',      'Fill in',      'ee',   3SELECT ROW_NUMBER() OVER(PARTITION BY re.AthleteGuid ORDER BY a.DateOfBirth DESC) AS rn,r.Guid as RegistrationID,a.Guid as AthleteID,a.Firstname as FName,a.LastName as LName,a.Gender as Sex,a.Address1 as Addr,a.City,a.[State] as ST,a.Zip,a.MedicalConditions as Medical,a.Email,a.DayPhone,a.EveningPhone,re.USATNumber,re.TShirtSize,re.Division as Div, CASE r.PaperRegistration        WHEN 1 THEN 'Paper'        ELSE                CASE r.PayByCheck                        WHEN 1 THEN 'Check'                        ELSE 'CC'                        END        END as Paytype,e.Name as [Event],r.Date as RaceDate,TotalFee,r.OnlineFee--,IsNull(rd.TotalDiscount,0.00) as TotalDiscount--,ra.Name as FeeName--,ra.Qty--,ra.Fee--,ra.Total,rrl.LegName,rrl.Name as RelayName,rrl.MedicalConditions,rrl.DateOfBirth,rq.QuestionText,rq.QuestionResponseFROM #Registration rINNER JOIN #RegistrationEvent re ON re.RegistrationGuid = r.GuidINNER JOIN [#Event] e ON e.Guid = re.EventGuidINNER JOIN #Athlete a ON a.AccountGuid = r.AccountGuid AND a.Guid = re.AthleteGuid--LEFT JOIN RegistrationDiscount rd ON rd.RegistrationGuid = r.GuidLEFT JOIN RegistrationRelayLeg rrl ON rrl.AthleteGuid = a.GuidLEFT JOIN RegistrationQuestion rq ON rq.AthleteGuid = a.Guid--LEFT JOIN RegistrationAdditionalFee ra ON ra.RegistrationGuid = r.GuidWHERE TotalFee >0 and r.RaceGuid='04010abc-83dd-4aaf-abb1-0177eac5d562'                DROP TABLE #Registration        DROP TABLE #Event        DROP TABLE #Athlete        DROP TABLE #RegistrationEvent        DROP TABLE #RegistrationRelayLeg        DROP TABLE #RegistrationQuestion  | 
                                             
                                         
                                     | 
                             
       
                            
                       
                          
                            
                                    | 
                                     visakh16 
                                    Very Important crosS Applying yaK Herder 
                                     
                                    
                                    52326 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2010-04-03 : 02:33:24
                                          
  | 
                                         
                                        
                                          one way of doing this is:-SELECT * INTO #TblFROM(SELECT 1 as RegID, 'Water' as Name, '2.00' as Fee, '3' as Quantity, NULL as QuestionUNION ALLSELECT 1 as RegID,'Food' as Name, '5.00' as Fee, '2' as Quantity, NULL as QuestionUNION ALLSELECT 1 as RegID, NULL, NULL,NULL,'My Name is Bob' as Question1UNION ALLSELECT 1 as RegID, NULL, NULL,NULL,'I like to swim' as Question2)tselect t.RegID,STUFF((SELECT ';' + COALESCE(' Name: '+ Name,'') + COALESCE(' Fee: '+ Fee,'') + COALESCE(' Quantity: '+ Quantity,'') + COALESCE(' Question: '+ Question,'') FROM #Tbl WHERE RegID=t.RegID FOR XML PATH('')),1,1,'') AS ValueListFROM (SELECT DISTINCT RegID FROM #Tbl)tDROP TABLE #Tbloutput--------------------------------------------------------------RegID       ValueList----------- ---------------------------------------------------------------------------------------------------------------------------------1            Name: Water Fee: 2.00 Quantity: 3; Name: Food Fee: 5.00 Quantity: 2; Question: My Name is Bob; Question: I like to swim------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     Harry C 
                                    Posting Yak  Master 
                                     
                                    
                                    148 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2010-04-04 : 22:32:33
                                          
  | 
                                         
                                        
                                          Thanks visakh16. The issue with this is that everything in ValueList comes back as delimited values in one column. What I really need is each value in its own column. I achieved what you are suggesting using CROSS APPLY. BUt I really need to get it to the next step. Any thoughts on how I can break them up separate rows? Basically if you look below, anything from the tables CROSS APPLIED, I want to return the items in separate columns, rather than one columnHere is my actual query with real tables and fields. Thanks!   -- Insert statements for procedure hereSELECT r.Guid as RegistrationID,a.Guid as AthleteID,a.Firstname as FName,a.LastName as LName,Convert(varchar(10),a.DateOfBirth, 101) as DOB,a.Gender as Sex,a.Address1 as Addr,a.City,a.[State] as ST,a.Zip,a.MedicalConditions as Medical,a.Email,a.DayPhone,a.EveningPhone,re.USATNumber,re.TShirtSize,re.Division as Div, CASE r.PaperRegistration	WHEN 1 THEN 'Paper'	ELSE		CASE r.PayByCheck			WHEN 1 THEN 'Check'			ELSE 'CC'			END	END as Paytype,e.Name as [Event],e.Fee as EntryFee,r.OnlineFee,TotalFee,Convert(varchar(10),r.Date, 101) as RaceDate,IsNull(rd.TotalDiscount,0.00) as TotalDiscount, LEFT(q.questions, LEN(q.questions)-4) as questions, LEFT(_af.fees, LEN(_af.fees)-4) as extras, LEFT(_uf.usat, LEN(_uf.usat)-4) as usat, LEFT(_rl.relay, LEN(_rl.relay)-4) as relaysFROM Registration rINNER JOIN RegistrationEvent re ON re.RegistrationGuid = r.GuidINNER JOIN [Event] e ON e.Guid = re.EventGuidINNER JOIN Athlete a ON a.AccountGuid = r.AccountGuid AND a.Guid = re.AthleteGuidLEFT JOIN RegistrationDiscount rd ON rd.RegistrationGuid = r.Guid    CROSS APPLY(         SELECT             CONVERT(NVARCHAR(MAX), QuestionText) + ',' AS [text()]            , CONVERT(NVARCHAR(MAX), QuestionResponse) + ',---' AS [text()]        FROM             RegistrationQuestion re         WHERE             re.AthleteGuid = a.Guid         ORDER BY             AthleteGuid         FOR XML PATH('')     ) q (questions)     CROSS APPLY(         SELECT             CONVERT(NVARCHAR(MAX), af.Name) + ',' AS [text()]            ,CONVERT(NVARCHAR(MAX), af.Fee) + ',' AS [text()]            ,CONVERT(NVARCHAR(MAX), af.Qty) + ',---' AS [text()]        FROM             RegistrationAdditionalFee af         WHERE             af.RegistrationGuid = r.Guid         ORDER BY             AthleteGuid         FOR XML PATH('')     ) _af (fees)     CROSS APPLY(         SELECT 		CONVERT(NVARCHAR(MAX), rl.LegName) + ',' AS [text()]		,CONVERT(NVARCHAR(MAX), rl.Name) + ',' AS [text()]		,CONVERT(NVARCHAR(MAX), rl.MedicalConditions) + ',' AS [text()]		,CONVERT(NVARCHAR(MAX),Convert(varchar(10),rl.DateOfBirth, 101)) + ',---' AS [text()]        FROM             RegistrationRelayLeg rl         WHERE             rl.RegistrationGuid = r.Guid         ORDER BY             AthleteGuid         FOR XML PATH('')     ) _rl (relay)   CROSS APPLY(         SELECT 		CONVERT(NVARCHAR(MAX), uf.Comment) + ',' AS [text()]		,CONVERT(NVARCHAR(MAX), uf.Fee) + ',---' AS [text()]        FROM             RegistrationUSATFee uf         WHERE             uf.RegistrationGuid = r.Guid         ORDER BY             AthleteGuid         FOR XML PATH('')     ) _uf (usat)        WHERE TotalFee >0 AND r.IsPaid = 1AND r.WaiverInitials<>''AND r.RaceGuid=@RaceGuidORDER BY RegistrationID, AthleteID, LName  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     visakh16 
                                    Very Important crosS Applying yaK Herder 
                                     
                                    
                                    52326 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2010-04-05 : 05:02:53
                                          
  | 
                                         
                                        
                                          | But will you be definite on number of associated values coming for each field?------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     Harry C 
                                    Posting Yak  Master 
                                     
                                    
                                    148 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2010-04-06 : 14:46:53
                                          
  | 
                                         
                                        
                                          | Well, I always know that questions for example will be questions and answer. But I don't know how many question/answer groups are actually in the list. There could be 1 or 5. Or anything really, though probably nor more than five or so.Any thoughts? Thanks so much for taking a look  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     tkizer 
                                    Almighty SQL Goddess 
                                     
                                    
                                    38200 Posts  | 
                                    
                                      
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     Harry C 
                                    Posting Yak  Master 
                                     
                                    
                                    148 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2010-04-07 : 00:08:21
                                          
  | 
                                         
                                        
                                          | Sorry tkizer. I will make sure in the future. Just really itching the get an answer to this one. Its been months I have been working on it. And I have not found a good solution...almost afraid I may have to resort to dreaded loops! ThanksHC  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     visakh16 
                                    Very Important crosS Applying yaK Herder 
                                     
                                    
                                    52326 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2010-04-07 : 00:26:07
                                          
  | 
                                         
                                        
                                          quote: Originally posted by Harry C Well, I always know that questions for example will be questions and answer. But I don't know how many question/answer groups are actually in the list. There could be 1 or 5. Or anything really, though probably nor more than five or so.Any thoughts? Thanks so much for taking a look
  then you need to use dynamic sql, as you're never definite on number of columns to be created------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     Harry C 
                                    Posting Yak  Master 
                                     
                                    
                                    148 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2010-04-07 : 10:21:38
                                          
  | 
                                         
                                        
                                          | any examples on the how? I really have been stuck on this one. ThanksHC  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     visakh16 
                                    Very Important crosS Applying yaK Herder 
                                     
                                    
                                    52326 Posts  | 
                                    
                                      
                                     | 
                                   
                            
                            
                                | 
                                    
                                      
                                     
                                    
                                 | 
                             
                         
                     | 
                 
             
         |