2011-12-06 18 views
0
SQL Server 2008では

、私は次のテーブルがあります。このシナリオでは列が他のテーブルのキーに基づいている新しいテーブルを作成する方法?

CREATE TABLE samples (SampleID int, Time datetime, RawData image) 

CREATE TABLE parameters (ParamID, SampleID int, ParamType uniqueidentifier, Value float) 

私のアプリケーションは、(「サンプル」テーブルから)与えられたサンプルを処理し、いくつかのdiferentパラメータを抽出し、「paremeters」テーブルの上にそれらを保存します。

特定のParamTypeで定義されたすべてのパラメータが列であり、すべての行が指定されたすべてのサンプルから抽出されたすべてのパラメータの値を定義する一時テーブルを作成したいとします。問題は、結果の列の数と名前が 'parameters'テーブルの値に依存していることです。

どうすればいいですか?

+1

質問を明確にするために質問の言い換えをすることはできますか? – Bala

+0

パラメータテーブルの値の例と望ましい結果が役立ちます。 –

答えて

1

私はあなたが求めているかを正確にわからないが、これはあなたが望むものに近いものでなければならない:

DECLARE @columns VARCHAR(MAX) 

SELECT @columns = 
     COALESCE(@columns + ',[' + CAST(p.ParamType as varchar(50)) + ']' 
      ,'[' + CAST(p.ParamType as varchar(50)) + ']') 
FROM 
(
    SELECT DISTINCT ParamType FROM parameters 
) as p 

DECLARE @query VARCHAR(MAX) 
SET @query = ' 
    SELECT * FROM 
    (
     SELECT SampleID, ParamType, Value FROM parameters 
    ) as tbl3 
    PIVOT 
    (
     AVG(Value) FOR ParamType in (' + @columns + ') 
    ) AS tblResults' 

EXECUTE (@query) 

Here SEDE上で実行されています。

+0

最初の選択(それにはCOALESCEが含まれています)とPIVOTクエリでの使用方法を教えてください。 – Jonas

+0

'SELECT @columns = COALESCE ...'文は、すべての個別のパラメータ識別子のコンマ区切り文字列を作成します。 「[Id1]、[Id2]、[Id3] ... 'のように。ご覧のとおり、PIVOTステートメントで文字列を使用して選択する列を示します。それは役に立ちますか? – kevev22

+0

はい、ありがとうございます。 – Jonas

0

私はこれを試してみてくださいあなたはピボットクエリ

が必要だと思う:

select * from 
(
    select SampleID,Value,ParamType from parameters 
) AS params 
pivot (max(value) for ParamType in ([Type1],[Type2])) as Result 
関連する問題