Anmelden

View Full Version : 3 dateien, 2 kett-Felder, welcher join



ILEMax
18-11-08, 12:40
Hi, Sql er
ich hab folgendes Problem

with k1 as (select tag1, menge1, arbeitplatz1 from ...),

k2 as (select tag2, menge2, arbeitplatz2 from ...),

k3 as (select tag3, menge3, arbeitplatz3 from ...)

select Tag1, tag2, tag3, menge1, menge2, menge3, arbeitsplatz1, arbeitsplatz2, arbeitsplatz3 from k1, k2, k3
where tag1 = tag2 and tag2 = tag3 and
arbeitsplatz1 = arbeitsplatz2 and
arbeitsplatz2 = arbeitsplatz3


Das geht gut, wenn ein Tag und ein Arbeitsplatz in allen 3 Dateien gleich ist.
ich brauche nun ALLE Tage und ALLE ABrbeitsplätze.

Da ich eine Stammdatei mit den möglichen Arbeitsplätzen habe habe ich
diese Datei mit left join mit k1, k2 und k3 verknüpft
also

select t0.arbeitsplatz, Tag1, tag2, tag3, menge1, menge2, menge3, arbeitsplatz1, arbeitsplatz2, arbeitsplatz3 from apl as t0 left join k1 on(arbeitsplatz = arbeitsplatz1),
apl as t1 left join k2 on(arbeitsplatz = arbeitsplatz2),
apl as t2 left join k3 on(arbeitsplatz = arbeitsplatz3)

Das ist es aber noch nicht, die Tage fehlen.

Ziel ist
Tag (1, 2, oder 3) arbeitsplatz (1, 2 oder 3) menge1, menge2, menge3 (jeweils falls vorhanden)
Wer kann da helfen

Danke
Max

Fuerchau
18-11-08, 13:32
Das ist ein typischer Fall von Union-Select:

select tag, 0, 0, Platz, ' ', ' ', Menge, 0, 0 from K1
union all
select 0, Tag, 0, ' ', Platz, ' ', 0, Menge, 0 from K2
union all
select 0, 0, Tag, ' ', ' ', Platz, 0, 0, Menge from K3

ILEMax
18-11-08, 14:47
Danke, das geht.
daraufhin hab ich es etwas geändert, und das geht nicht.
Ich habe den with zweig erweitert um

tot as select tag1 as ta, platz1 as pl, menge1 as me from k1 union all
select tag2 as ta, platz2 as pl, menge2 as me from k2 union all
select tag3 as ta, platz3 as pl, menge3 as me from k3

und den eigentlichen select umgebaut auf
select ta, pl, sum(me) from tot group by ta, pl

auch das geht

Schreib ich nun ein
create view myview as
davor, bekomme ich die Fehlermeldung
Spaltenliste erforderlich.

Was bedeutet das ?

Max

Fuerchau
18-11-08, 16:15
Da muss man sich die Syntax mal genauer ansehen, die View benötigt da leider ein bisschen Hilfe:

create view myview (f1, f2, ...)
as
select ...

Im Select lässt man dafür "as name" weg.

ILEMax
18-11-08, 16:42
jep
nun hab ich die view, Super, Danke !!
Werd Morgen mal die Zahlen prüfen.

Weggelassen hab ich aber nix, ich hab nur
create view myview (ta, pl, me)
as
select ...
geschrieben und die view ist da.

Danke
Gruß
Max

Fuerchau
18-11-08, 16:44
"as name" wird dann einfach ignoriert oder (was zu testen wäre), die Namensliste kann eine andere Reihenfolge als im Select sein, wobei das für SQL eigentlich ganz unerheblich ist.