2016-09-22 3 views
0

Моя таблица:MSSQL запроса объединить информацию в новой таблице

servername: | FactName: | FactValue: 
server01 | CPUcores | 2 
server01 | Memory | 64GB 
server01 | HDD01size | 50GB 
server01 | HDD02size | 60GB 
server01 | HDD03size | 70GB 
server02 | CPUcores | 4 
server02 | Memory | 32GB 
server02 | HDD01size | 50GB 
server02 | HDD02size | 60GB 
server02 | OS  | Windows 2012 R2 

Что я пытаюсь создать с помощью запроса MSSQL новая таблица со следующей продукции:

servername:|CPUcores:|Memory:|HDD01size:|HDD02size:|HDD03size:|OS: 
server01 |2  |64GB |50GB  |60GB  |70GB  | -  
server02 |4  |32GB |50GB  |60GB  | -  |Windows 2012 R2 

Столбцы нужно для динамического создания во время выборки данных. Названия столбцов:

SELECT DISTINCT [FactName] 
FROM [table] 

... с добавлением столбца «имясервера».

Я не могу понять, какой лучший способ это сделать.

+0

Каков ожидаемый результат, если кто-то позже выбрасывает HDD04размер для server01? – jarlh

ответ

1

Это называется поворот стола. Вот один вариант использования conditional aggregation:

select servername, 
    max(case when FactName = 'CPUcores' then FactValue end) as Cpucores, 
    max(case when FactName = 'Memory' then FactValue end) as Memory, 
    max(case when FactName = 'HDD01size' then FactValue end) as HDD01size, 
    max(case when FactName = 'HDD02size' then FactValue end) as HDD02size, 
    max(case when FactName = 'HDD03size' then FactValue end) as HDD03size, 
    max(case when FactName = 'OS' then FactValue end) as OS 
from yourtable 
group by servername 

Если вы не знаете, все потенциальные ценности/столбцы, то вам нужно использовать dynamic sql.

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