2015-04-13 4 views
-1

У меня есть таблица Parent Called данные вSQL QUERY Pivot и присоединиться к

ID  Lat  Lon 

и есть таблица фото как

ID id_from_Data_table photoPath 

фото таблица имеет несколько записей для каждой записи данных, способных.

Я хотел бы иметь набор результатов, как это:

lat lon photopath1 photopath2 photopath3 ...... 

фото колонки путь для каждой записи в таблице фото.

+0

Это очень общий вопрос, и есть много ответов, демонстрирующих, как сделать стержень. Сначала сделайте соединение, затем ось. – jpw

+0

Вы можете найти много похожих вопросов, выполнив поиск с помощью «dynamic pivot». Я бы все-таки порекомендовал сделать это за пределами базы данных, так как это действительно не правильное место для форматирования данных, подобных этому –

+0

. Я был бы признателен, если бы вы подготовили образец, я потратил много времени, но похоже, что мне не хватает какой-либо концепции на этом. – johnny

ответ

1

Использование динамического SQL запрос может выглядеть следующим образом:

DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(rn) 
        FROM (
        SELECT d.*, p.photoPath, rn = CONCAT('Photo Path ',ROW_NUMBER() OVER (PARTITION BY d.id ORDER BY p.id)) 
        FROM data d 
        JOIN photo p ON d.ID = p.id_from_Data_table 
       ) yourtable 
        GROUP BY rn 
        ORDER BY rn 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SET @query = N' 
    SELECT lat, lon, ' + @cols + N' 
    FROM 
    (
     SELECT 
      d.*, 
      p.photoPath, 
      rn = CONCAT(''Photo Path '', ROW_NUMBER() OVER (PARTITION BY d.id ORDER BY p.id)) 
     FROM data d 
     JOIN photo p ON d.ID = p.id_from_Data_table 
    ) x 
    PIVOT 
    (
     MAX(photoPath) FOR rn IN (' + @cols + N') 
    ) p;' 

EXEC sp_executesql @query; 

Sample SQL Fiddle

Смежные вопросы