2017-10-28 5 views
1

を旋回させることがために得るためにこれは私のソーステーブル(pivot_dummy)です:SQLのピボット - どのように複数の列の間のすべての可能な組み合わせが

input data

と私はPARAMETER_TYPEことによってそれを旋回させる必要がありますが、間のすべての可能な組み合わせを必要としますParameter_valの。私はこのコードを使用しています。この

Desired Output

のようなものは、それが行わ取得します

SELECT nct_id, [Asset],[Indication], rowid 
FROM (SELECT nct_id,Parameter_val,parameter_type, rowid 
     FROM (Select *, 
        Row_Number() Over (Partition By nct_id,Parameter_type ORDER BY nct_id) RowId 
      from [dbo].[pivot_dummy] 
      ) a 
    ) s 
Pivot (
    max(parameter_val) 
     for Parameter_type in ([Asset], [Indication]) 
    ) as pivottable 

しかし、これは私に所望の出力を与えていないとの間で資産/適応症のための様々な組み合わせを省略しています。私はまた、より多くの列が来たら(それは非常に可能です)、どのように動作するのかよくわからないので、NCT_IDに基づいてすべてのparam_type列の可能な組み合わせを見つけることができる汎用ソリューションを探しています。

本当にありがとうございます。ありがとう!

+0

これが見えます。まだ何か試しましたか? –

答えて

0

これは、すべてのIDがすべての値を持つわけではないため、前の質問よりも扱いにくいです。

誘惑がある:

select pd1.nct_id, pd1.parameter_value as asset, pd2.parameter_value as indication, 
     pd3.parameter_value as BMx, pd4.parameter_value as LOT 
from pivot_dummy pd1 join 
    pivot_dummy pd2 
    on pd1.nct_id = pd2.nct_id and 
     pd1.parameter_type = 'Asset' and 
     pd2.parameter_type = 'Indication' join 
    pivot_dummy pd3 
    on pd1.nct_id = pd3.nct_id and 
     pd3.parameter_type = 'BMx' join 
    pivot_dummy pd4 
    on pd1.nct_id = pd4.nct_id and 
     pd4.parameter_type = 'LOT'; 

すべての4つの値を持つIDSでしか動作。 full joinに切り替えると問題は解決しますが、クエリは複雑になります。

私は最善の解決策は、次のようになります left joinだと思う:あなただけの標準ピボットクエリを必要とするよう

select pd.nct_id, pd1.parameter_value as asset, pd2.parameter_value as indication, 
     pd3.parameter_value as BMx, pd4.parameter_value as LOT 
from (select distinct nct_id from pivot_dummy 
    ) pd left join 
    pivot_dummy pd1 
    on pd1.nct_id = pd.nct_id and 
     pd1.parameter_type = 'Asset' left join 
    pivot_dummy pd2 
    on pd2.nct_id = pd.nct_id and 
     pd2.parameter_type = 'Indication' left join 
    pivot_dummy pd3 
    on pd3.nct_id = pd.nct_id and 
     pd3.parameter_type = 'BMx' left join 
    pivot_dummy pd4 
    on pd4.nct_id = pd.nct_id and 
     pd4.parameter_type = 'LOT'; 
+0

これは魅力のように機能します。ありがとうございました!! –

関連する問題