2013-09-30 2 views
3

Это мой запрос ниже в MSSQLКак вернуть несколько строк в то время как поворотный стол в SQLServer

declare @cars as table (
owners tinyint, 
attribute varchar(20), 
value varchar(20) 
) 
insert into @cars(owners, attribute, value) 
values  (1, 'Make', 'VW'), 
      (1, 'Model', 'Rabbit'), 
      (1, 'Color', 'Gold'), 
      (1, 'Make', 'V'), 
      (1, 'Model', 'Rabbi'), 
      (1, 'Color', 'Goldddd'), 
      (2, 'Make', 'Jeep'), 
      (2, 'Model', 'Wrangler'), 
      (2, 'Color', 'Gray') 


      select * from @cars 


    select pvt.owners, pvt.Make, pvt.Model, pvt.Color 
from @cars c 
pivot (
min(value) 
for attribute in ([Make],[Model],[Color]) 
) pvt 

Над возвращает

Владельцы делают модель цвет

1  v rabbi gold 

    2  jeep wrangler gray 

, но мне нужно, чтобы вернуться подобные

Владельцы делают цветовую модель

1  v rabbi gold 
    1  vw rabbit golddd 
    2  jeep wrangler gray 

how is possible? 
+0

почему мин (значение)? если вы хотите все, используйте max (value) – makciook

+1

, почему вы присоединились к VW с Goldddd вместо Gold? –

ответ

1

Вам нужно добавить дополнительное поле для ваших данных, что дает каждому владельцам/комбинированную атрибут уникальное значение:

SELECT pvt.owners, pvt.Make, pvt.Model, pvt.Color 
FROM ( SELECT Owners, 
        Attribute, 
        Value, 
        RowNum = ROW_NUMBER() OVER(PARTITION BY Owners, Attribute ORDER BY Value) 
      FROM @Cars 
     ) c 
     PIVOT 
     ( MIN(Value) 
      FOR Attribute IN ([Make], [Model], [Color]) 
     ) pvt 
ORDER BY Owners, Make, Model, Color; 

Ключевым моментом здесь является, а не только проездом @cars к оси, подзапрос добавляет дополнительный столбец, чтобы сделать таблицу с возможностью поворота этого:

Owners Attribute Value RowNum 
1  Color  Gold  1 
1  Color  Goldddd  2 
1  Make  V   1 
1  Make  VW   2 
1  Model  Rabbi  1 
1  Model  Rabbit  2 
2  Color  Gray  1 
2  Make  Jeep  1 
2  Model  Wrangler 1 

Так, что теперь есть дополнительный столбец для дифференциации Gold от Goldddd, например, заставляя их на разные строки в сводном выходе.

У вас возникнут проблемы, хотя, если для всех атрибутов нет дубликатов, в которых отсутствуют данные, вы получите NULL, например, если бы вы удалили из ваших данных значения (1, 'Color', 'Goldddd'), тогда выход будет быть:

owners Make Model  Color 
1  V  Rabbi  Gold 
1  VW  Rabbit  NULL 
2  Jeep Wrangler Gray 

Example on SQL Fiddle

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