2016-09-22 13 views
0

私のテーブルに情報を結合するために:私は、MSSQLクエリを作成しようと何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 

は、次のような出力を持つ新しいテーブルです:

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

後で誰かがserver01のHDD04sizeをスローすると、どのような結果になるでしょうか? – 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を使用する必要があります。

関連する問題