2017-12-16 3 views
0

Unter meinem Tisch Owner mit zwei Spalten ist, [Owner Name] und Address Daten:N Zeilen Daten Spalte in SQL Server 2008 R2

Owner Name  Address 
----------------------- 
CURRENT OWNER AD1 
CURRENT OWNER AD2 
CURRENT OWNER AD3 
CURRENT OWNER AD4 

I unten Ausgang benötigen:

Owner Name Address1 Address2 Address3 Address4 
---------------------------------------------------------- 
CURRENT OWNER AD1  AD2   AD3   AD4 

Adressen können mehr sein als 1000 gegen den Namen des Besitzers.

Antwort

1

Sie dynamische SQL verwenden können und PIVOT dies zu tun:

DECLARE 
    @MaxAddresses int = (SELECT MAX(C) FROM (SELECT COUNT([Owner Name]) C FROM [Owner] GROUP BY [Owner Name]) Q) 
    , @AddressHeaders varchar(max) = '' 
    , @n int = 1 

WHILE @n <= @MaxAddresses 
BEGIN 

    SET @AddressHeaders = @AddressHeaders + ', Address' + CAST(@n as varchar) 

    SET @n = @n + 1 

END 

SET @AddressHeaders = STUFF(@AddressHeaders, 1, 2, '') 

DECLARE @SQL varchar(max) = 
    ' 
     SELECT [Owner Name], ' + @AddressHeaders + ' 
     FROM 
      (
       SELECT 
        [Owner Name] 
        , [Address] 
        , ''Address'' + CAST(ROW_NUMBER() OVER (PARTITION BY [Owner Name] ORDER BY [Address]) AS varchar) AddressHeader 
       FROM [Owner] 
      ) Q 
      PIVOT 
      (
       MAX([Address]) 
       FOR AddressHeader IN (' + @AddressHeaders + ') 
      ) P 
    ' 

EXEC (@SQL) 
Verwandte Themen