2017-04-16 3 views
2

Wie kann ich tue dies:TSQL select max aus 3 Spalten und dann innere Verknüpfung eine Spalte

in Tabelle AI haben 3 Spalten mit ganzzahligen Werten: a, b, c in Tabelle BI hat 3 Spalten mit ganzzahligen Werten : x, y, z

Ich möchte max von (a, b, c) auswählen und innere verbinden den entsprechenden Wert von x, y, z.

Beispiel:

a = 1, b = 2, c = 3 

x = 7, y = 8, z = 9 

Ergebnis: Tabelle mit zwei Spalten

firstColumn | secondColumn 

c   | 9 

Erklärung: c ist der max von a, b, c, und wir nehmen den Namen, die nicht der Wert 9 ist der Wert aus der zweiten Tabelle, was wir brauchen

Vielen Dank im Voraus PS Ich benutze SQL Server 2014

Edit: Ich habe versucht, ein Beispiel mit Excel-Tabelle

enter image description here

+0

Können Sie Ihrer Frage und der erwarteten Ausgabe einige Beispieldaten hinzufügen? –

+0

@ M.Ali Check out http://2.1m.yt/fefqfm.png Ich habe versucht, ein Beispiel mit Excel-Tabelle – marto

+0

Sie passend für die zweite Spalte basierend auf _position_? SQL macht dies außerhalb einer CASE-Anweisung für jede mögliche Position nicht wirklich. –

Antwort

1

Es sei denn, beide Tabellen Sie propably nicht nur 1 Zeile haben, ob zentral trete ein Kreuz, das alle Datensätze anschließen würden von Tabelle1 für alle aus Tabelle2.
Also meine Vermutung ist, dass Sie so etwas wie dies gesuchte:

select 
case 
when c > isnull(a,0) and c > isnull(b,0) then 'c' 
when b > isnull(a,0) then 'b' 
when a is not null then 'a' 
end as firstColumn, 
case 
when c > isnull(a,0) and c > isnull(b,0) then z 
when b > isnull(a,0) then y 
when a is not null then x 
end as secondColumn 
from table1 t1 
join table2 t2 on t1.table2_id = t2.id 

Nur ein bisschen von Testdaten:

declare @table1 table (id int identity(1,1), a int, b int, c int, table2_id int default 1); 
declare @table2 table (id int, x int, y int, z int); 
insert into @table1 (a, b, c) values 
(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1), 
(4,5,5),(5,4,5),(5,5,4),(4,5,4),(4,4,5),(4,4,4), 
(6,7,null),(6,null,7),(null,6,7), 
(8,null,null),(null,8,null),(null,null,8),(null,null,null); 
insert into @table2 (id, x, y, z) values (1,100,200,300); 
+0

genau! Prost Luk – marto

0

Die Tabellenstruktur Sie uns nicht unterstützt Ihre Anforderung gezeigt haben. Sie benötigen etwas, das die Zeilen in einer Tabelle mit der anderen verbindet.

Wenn diese vorhanden Sie dann verwenden können (demo)

SELECT t1label, 
     t2col 
FROM TableA TA 
     JOIN TableB TB 
     ON TA.rownum = TB.rownum 
     CROSS APPLY (SELECT TOP 1 * 
        FROM (VALUES('A', TA.a, TB.x), 
            ('B', TA.b, TB.y), 
            ('C', TA.c, TB.z)) v(t1label, t1col, t2col) 
        ORDER BY t1col DESC) CA 

Im Falle einer TableA Reihe zwei oder mehr Spalten mit der gleichen Maximalwert es undeterministic ist, der ausgewählt wird.

Verwandte Themen