2017-10-28 13 views
1

Dies ist meine Quelltabelle (pivot_dummy):SQL Schwenk - Wie alle möglichen Kombinationen zwischen mehreren Spalten erhalten geschwenkt werden

input data

und ich brauche es durch Parameter_type zu schwenken, müssen aber alle möglichen Kombinationen zwischen Parameter_val ist. So etwas wie dies

Desired Output

ich diesen Code verwenden es zu tun bekommen:

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 

Aber das gibt mir nicht die gewünschte Ausgabe und verschiedene Kombinationen für Asset/Indikationen dazwischen weggelassen. Ich bin mir auch nicht sicher, wie es funktionieren wird, wenn mehr Spalten hereinkommen (was sehr wahrscheinlich ist) und suche daher nach einer generischen Lösung, die mögliche Kombinationen zwischen allen param_type Spalten basierend auf dem gemeinsamen NCT_ID finden kann.

Jede Hilfe wird wirklich geschätzt. Vielen Dank!

+0

Das sieht man nur eine Standard-Pivot-Abfrage benötigen. Hast du schon etwas probiert? –

Antwort

0

Dies ist schwieriger als Ihre vorherige Frage, weil nicht alle IDs alle Werte haben.

Die Versuchung ist:

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'; 

Dies funktioniert nur für IDs, die alle vier Werte haben. Die Umstellung auf eine full join löst das Problem - erschwert aber die Abfrage.

Ich denke, die beste Lösung ein left join ist, die wie folgt aussieht:

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

Das funktioniert wie ein Zauber. Vielen Dank!! –

Verwandte Themen