Benutzer mit den meisten Antworten
Kann man Spalten unterschiedlicher Dimension aus verschiedenen Tabellen verbinden?

Frage
-
Hallo zusammen,
ich stehe mal wieder vor einem SQL-Problem. Ich möchte aus verschiedenen Tabellen einzelne Spalten so zusammenführen, dass diese in einer neuen Tabelle einfach aneinander gehängt werden, wobei fehlende Dimensionen durch 'null' aufgefüllt werden, also z.B.:
Also sowas wie:
SELECT [Sp1T1] FROM Tabelle1 as t1 LEFT JOIN ( SELECT [Sp1T2] FROM Tabelle2 t2 ) as t2 ON t2.[Sp1T2] = t1[Sp1T1] LEFT JOIN ( SELECT [Sp1T3] FROM Tabelle3 t3 ) as t3 ON t3.[Sp1T3] = t2.[Sp1T2]
Geht so etwas?
Gruß Jürgen
Antworten
-
Verstehe zwar auch den Sinn nicht, aber so geht es!
use cmu go Declare @Tabelle1 as Table(Sp1T1 char(1)); Declare @Tabelle2 as Table(Sp1T2 char(1)); Declare @Tabelle3 as Table(Sp1T3 char(1)); Insert into @Tabelle1 values ('A'),('B'),('C'); Insert into @Tabelle2 values ('D'),('E'),('F'),('G'),('H'); Insert into @Tabelle3 values ('X'),('Y'); With Numbers as ( Select 1 as n UNION ALL Select n +1 from Numbers where n < 10 ), Tab1 as( Select Sp1T1, ROW_NUMBER() OVER(ORDER BY Sp1T1) as rn1 from @Tabelle1 ), Tab2 as( Select Sp1T2, ROW_NUMBER() OVER(ORDER BY Sp1T2) as rn2 from @Tabelle2 ), Tab3 as( Select Sp1T3, ROW_NUMBER() OVER(ORDER BY Sp1T3) as rn3 from @Tabelle3) Select Tab1.Sp1T1, Tab2.Sp1T2, Tab3.Sp1T3 from Numbers n Left Join Tab1 on n.n = Tab1.rn1 Left Join Tab2 on n.n = Tab2.rn2 Left Join Tab3 on n.n = Tab3.rn3 where coalesce(Sp1T1, Sp1T2, Sp1T3) is not null ;
Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu
- Als Antwort markiert Jürgen Sch Donnerstag, 18. Oktober 2018 12:38
Alle Antworten
-
Hallo Jürgen,
kannst Du uns die Logik für das gesuchte Ergebnis erklären; nur durch einen Blick auf die Daten ergibt sich mir diese nicht? Und wieso verwendest Du immer so umständlich Unterabfragen, das macht die SQL Statements unleserlich und sinnig ist es auch nicht?
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Verstehe zwar auch den Sinn nicht, aber so geht es!
use cmu go Declare @Tabelle1 as Table(Sp1T1 char(1)); Declare @Tabelle2 as Table(Sp1T2 char(1)); Declare @Tabelle3 as Table(Sp1T3 char(1)); Insert into @Tabelle1 values ('A'),('B'),('C'); Insert into @Tabelle2 values ('D'),('E'),('F'),('G'),('H'); Insert into @Tabelle3 values ('X'),('Y'); With Numbers as ( Select 1 as n UNION ALL Select n +1 from Numbers where n < 10 ), Tab1 as( Select Sp1T1, ROW_NUMBER() OVER(ORDER BY Sp1T1) as rn1 from @Tabelle1 ), Tab2 as( Select Sp1T2, ROW_NUMBER() OVER(ORDER BY Sp1T2) as rn2 from @Tabelle2 ), Tab3 as( Select Sp1T3, ROW_NUMBER() OVER(ORDER BY Sp1T3) as rn3 from @Tabelle3) Select Tab1.Sp1T1, Tab2.Sp1T2, Tab3.Sp1T3 from Numbers n Left Join Tab1 on n.n = Tab1.rn1 Left Join Tab2 on n.n = Tab2.rn2 Left Join Tab3 on n.n = Tab3.rn3 where coalesce(Sp1T1, Sp1T2, Sp1T3) is not null ;
Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu
- Als Antwort markiert Jürgen Sch Donnerstag, 18. Oktober 2018 12:38