2017-10-28 145 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'; 

這隻適用於具有所有四個值的ID。切換到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

這工作就像一個魅力。謝謝!! –

相關問題