2017-12-19 10 views
0

Ich habe zwei Tabellen tabelle1 mit col1 & table2 mit col2 und col3 ich den folgenden Code zu versuchen, sie zu wählen:SQLSelect und schwenken in Abhängigkeit von zwei Spalten

select col1,col2,col3 
from table1 
inner join table2 on table1.id = table2.table1_id 

es gibt mir das Ergebnis wie folgt: selected result

ich möchte dieses Ergebnis erhalten:

Final result

Wie könnte ich das tun? Dank im Voraus ...

+0

Ich könnte sogar empfehlen, gegen diese Abfrage/Design. Wenn die Anzahl der 'Col2'-Werte zunimmt, ändert sich auch die Anzahl der Spalten in Ihrer Ergebnismenge. Sie möchten wahrscheinlich hier dynamisches SQL für eine robuste Antwort verwenden. –

+0

Wie viele Werte können in der Spalte "Others" stehen? – Sergey

+0

Meine Werte sind keine feste Zahl, die Anzahl der Werte wurde geändert. meine alle Werte sind varchar Werte und ich habe keine ganzen Zahlen darin. Ich werde eine zusätzliche Erklärung geben: Wenn col1 Wert = a, möchte ich Werte aus col2 als eine Zeile auswählen, wobei col3 Wert = x und concat die anderen Werte, die nicht "x" als eine Spalte namens andere, und ich möchte laufen die gleiche Abfrage wieder, aber jetzt, wenn die col3 = y, so jetzt die eine Reihe Werte werden, wenn die col3 = y und alle Werte, die nicht "y" werden jetzt zu anderen gehen, und so weiter. – Taymourlank

Antwort

0

Wenn Sie benötigen nur eine endliche Anzahl von Werten in den Spalten „T1“ versuchen können ...“ T5" und "Sonstige" (zum Beispiel nicht mehr als 5), dann wählen Sie sehen aus wie

select col1, x2.* 
from table1 
cross apply (
    select [1],[2],[3],[4],[5], 
     concat([6], ', '+[7], ', '+[8], ', '+[9], ', '+[10]) Others 
    from (
    select col2, rs + row_number()over(partition by rs order by col2) rn 
    from table2 
     cross apply (select case when col3 = 'X' then 0 else 5 end rs)x1 
    where table2.table1_id = table1.id 
)a pivot (max(col2) for rn in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10]))p 
)x2 

See demo here

Sonst könnte man wahrscheinlich eine dynamische sQL benötigen, als Tim sug gessted.

+0

vielen Dank, es ist eine perfekte Antwort für mich, die mein Problem lösen. Aber es gibt noch eine Sache, wie könnte ich es dynamisch machen, wenn ich die Anzahl der Werte nicht kenne. – Taymourlank

+0

@Taymourlank, dynamische sql bedeutet, dass Sie nicht Select-Ausdruck, sondern Code entwickeln, die passende Auswahl jedes Mal erstellt, wenn es ausgeführt werden muss. Es ist schwierig, eine genaue Lösung zu finden, da es auf Details Ihres Projekts ankommt: Was ist ein Client, wie er Daten anfordert, verarbeitet und anzeigt und so weiter. – Sergey

0

Sie „Fall, wenn“ und „Gruppe“ wie

select col1,sum(case when col2=value1 then vluee1 end) as T1, 
sum(case when cols2=value3 then value3 end) as T2 
from table1 
inner join table2 on table1.id = table2.table1_id 
group by col1 
Verwandte Themen