none
Kann man Spalten unterschiedlicher Dimension aus verschiedenen Tabellen verbinden? RRS feed

  • 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

    Donnerstag, 18. Oktober 2018 05:40

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
    Donnerstag, 18. Oktober 2018 06:31
    Beantworter

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]

    Donnerstag, 18. Oktober 2018 06:06
  • 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
    Donnerstag, 18. Oktober 2018 06:31
    Beantworter
  • Hallo zusammen,

    danke für die Antworten.

    Der Lösungsansatz von Christoph ist das, was ich gesucht habe.

    Gruß

    Jürgen

    Donnerstag, 18. Oktober 2018 12:40