sql >> Databasteknik >  >> RDS >> Sqlserver

Sammanfoga flera tabeller helt i samma kolumner

Det finns flera sätt, men jag tror att följande är det mest populära:

select allk.k, t1.c1, t2.v2, t3.v3, t4.v4
from (select k from t1 union 
      select k from t2 union
      select k from t3 union
      select k from t4
     ) allk left outer join
     t1
     on allk.k = t1.k left outer join
     t2
     on allk.k = t2.k left outer join
     t3
     on allk.k = t3.k left outer join
     t4
     on allk.k = t4.k;

Om du har en separat tabell över alla k värden kan du använda det istället för allk underfråga.

Ett enklare sätt att skriva din full outer join fråga är att använda coalesce() :

SELECT COALESCE(t1.K, t2.K, t3.K, t4.K) [K], V1, V2, V3, V4
FROM @T1 t1 FULL JOIN
     @T2 t2
     ON t2.K = t1.K FULL JOIN
     @T3 t3
     ON t3.K = coalesce(t1.K, t2.K) FULL JOIN
     @T4 t4
     ON t4.K = coalesce(t1.K, t2.K, t3.k);

Och den tredje metoden är union all /group by metod:

select k, max(v1) as v1, max(v2) as v2, max(v3) as v3, max(v4) as v4
from (select k, v1, NULL as v2, NULL as v3, NULL as v4
      from t1 union all
      select k, NULL as v1, v2, NULL as v3, NULL as v4
      from t2 union all
      select k, NULL as v1, NULL as v2, v3, NULL as v4
      from t3 union all
      select k, NULL as v1, NULL as v2, NULL as v3, v4
      from t4
     ) t
group by k;



  1. Ändra ett SQL Server Agent Schema (T-SQL)

  2. Neo4j - Släpp ett index med Cypher

  3. SQL-sats för avstämning

  4. Flytta SQL Server 2008-databasfiler till en ny mappplats