2016-09-22 1 views
0

Ma table:requête MSSQL de combiner des informations dans une nouvelle table

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 

Ce que je tente de créer une requête MSSQL est une nouvelle table avec la sortie suivante:

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

Les colonnes ont besoin être créé dynamiquement lors de la récupération des données. Les noms de colonnes sont:

SELECT DISTINCT [FactName] 
FROM [table] 

... avec l'ajout de la colonne "servername".

Je n'arrive pas à comprendre quel est le meilleur moyen d'y parvenir.

+0

Quel est le résultat attendu si quelqu'un lance plus tard HDD04size for server01? – jarlh

Répondre

1

Il s'agit d'un pivotement de table. Voici une option à l'aide 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 

Si vous ne connaissez pas toutes les valeurs possibles/colonnes, alors vous aurez besoin d'utiliser dynamic sql.