phpbar.de logo

Mailinglisten-Archive

Problem mit Kreuztabelle / JOIN

Problem mit Kreuztabelle / JOIN

Michael Donning donning at informenta.de
Mon Jul 31 09:31:12 CEST 2006


Hallo Andre,

Andre Krajnik erdachte folgende Zeilen:

> (...)
> ICh möchte eine Report erzeugen, welche Software auf bestimmten PCs
> installiert ist. Dafür soll für jede Software, die auf einem PC
> isntalliert ist ein X gemacht werden. zudem am Zeilenende eine
> Summierung. Die Summierung klappt auch, aber von den "X" kommt immer
> nur eines pro Zeile. warum?   
> 
> select s.Software,
> if (t.PC = "anke", "X", "") AS Anke,
> if (t.PC = "buchhaltung", "X", "") as Buchhaltung, if (t.PC =
> "empfang", "X", "") as Empfang, if (t.PC = "ernaehrung", "X", "") as
> Ernaehrung, if (t.PC = "team", 1, "") as Team,  
> count(*) as Summe
> from tsms t INNER join Software s using(swid) Group by Software;
> (...)

Sollte eine der Spalten NULL-Werte enthalten, so geben Vergleiche mit Ihm
ungültige Werte. Also entweder definierst Du die Spalten als NOT NULL mit
Default "" oder du fängst den Fall mit z.B. einem verschachtelten, IF(t.PC
is NULL,"",t.PC) ab.

Deine Gruppierung ist mir ehrlich gesagt auch nicht so ganz klar für die
Felder Anke, Buchhaltung etc. ist nicht definiert, wie sie aggregiert werden
sollen.

Vielleicht solltes Du mit Hilfe einer IF-Funktion je nach Zustand die Werte
1 oder 0 generieren. Dann das je Spalte mit der Sum() Funktion addieren.
(Ergibt vermutlich 1 oder 0) und auf die Sum dann Nocheinmal ein IF um die 1
in ein "X" umzusetzen.

Also z.B. so ungefähr, ungetestet:
IF (SUM(IF (if (t.pc is null,"",t.pc)="anke", 1,0)),"X","") as Anke

Es gibt sicherlich auch noch andere Ansätze.


mit freundlichen Grüßen,
Michael Donning

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive