Abfrage??? Array???
Einklappen
X
-
Die Abfrage funktioniert so wunderbar. Aber ich hab ein neues Problem diesbezüglich.
Ich möchte mir die Anzahl der Aufträge nach dem jeweiligen Monat im Jahr gruppiert ausgeben lassen.
Ich geh wie folgt vor, was aber zu keiner Lösung führt.
Select firma, To_CHAR(auftragsdatum,'MM / YYYY') jahr, count(TO_CHAR(LFZ_BEGINN,'MM / YYYY')) from tblFirma, tblAuftrag
group by To_CHAR(auftragsdatum,'MM / YYYY')
Was mache ich da falsch?
und wenn ich es nach dem datum sortiert ausgeben lassen möchte, dann sortiert gebe ich folgendes ein, was aber falsch, ist da er den String sortiert:
order by To_CHAR(auftragsdatum,'MM / YYYY')
wenn ich nur:
order by auftragsdatum
eingebe, dann erhalte ich folgende Fehlermeldung:
>[Error] Script lines: 1-9 --------------------------
ORA-00979: not a GROUP BY expressionZuletzt geändert von mobo81; 09.03.2006, 09:35.
Kommentar
-
Du könntest meinen früheren Vorschlag, einfach von MySql nach Oracle angepasst, versuchen. Die Gegenfrage ist noch, ob du das für Geld machst, oder in Ausbildung, oder in Deiner Freizeit. Im Dritten Fall würde ich Dir noch helfen (aber dann hättest du kein Orakel).
added: Die Abschnitte , die zu lesen wären, wurden auch schon angegeben, allerdings für MySQL. Es würde mich doch sehr wundern, wenn das im Oracle nicht gleichermassen stehen würde. Zu Month() usw hat Dir schon 'penizillin' die info geliefert.Zuletzt geändert von globqluqqlo; 09.03.2006, 13:53.
Kommentar
-
ORA-00979: not a GROUP BY expression
Du gruppierst nicht nach allen single cols in deinem query. Bei oracle ist das unabdingbar.Zuletzt geändert von MelloPie; 09.03.2006, 21:40.Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Kommentar
-
EDIT:
ich schrieb:
SELECT firma, count(1) AS count, month(datum) AS monat, year(datum) AS jahr
FROM tabelle
GROUP BY firma, monat, jahr;
mobo81 schrieb:
ja schlaumeier, dann sag mir doch was ich falsch mache, anstatt schlau sprüche abzugeben
Dann habe ich noch eine Frage, wenn ich die Felder als Tabelle mit foreach ausgebe, und die Tabellenheaders mit for (i), wie muss man es machen, damit die Tabellenheaders zu den Datenspalten passen ('firma' über der Spalte firma usw.) und die headers nicht anders angeordnet sind als die Daten? Geht das zuverlässig mit foreach und for gemischt?
PHP-Code:echo '<table>';
echo '<tr>';
for ($i=0; $i<$feldanzahl; $i++)
echo '<th>' . mysql_feld_name ($rs, $i) . '</th>';
while ($row = mysql_fetch_array ($rs)) {
echo '<tr>';
foreach ($row as $key=>$value)
echo '<td>' . $value . '</td>';
}#row
echo '</table>';
Kommentar
-
Original geschrieben von globqluqqlo
Dann habe ich noch eine Frage, wenn ich die Felder als Tabelle mit foreach ausgebe, und die Tabellenheaders mit for (i), wie muss man es machen, damit die Tabellenheaders zu den Datenspalten passen ('firma' über der Spalte firma usw.) und die headers nicht anders angeordnet sind als die Daten? Geht das zuverlässig mit foreach und for gemischt?
Wenn also deine Funktion mysql_feld_name() sie in der gleichen Reihenfolge zurückliefert, wie die Spalten im Select ausgewählt wurden, dann sehe ich da kein Problem. (Bei SELECT * eigentlich auch nicht - aber das macht man ja eigentlich nicht ...)
Alternativ könnte man auch mysql_feld_name() so aufbauen, dass sie gleich die Spaltennamen als Array zurückliefert - das könnte man dann ebenfalls mit foreach durchlaufen.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Hier noch die Lösung, in mySQL, mit veränderlichem von- und bis-Monat, und die Kunden, wo keine Aufträge sind, fehlen nicht einfach, sondern geben null. Dafür braucht es zwei LEFT JOINS.
PHP-Code:$query = 'SELECT
kunde.firma as firma, count(verkauf.datum) AS count,
MONTH(kalender.datum) AS monat,
YEAR(kalender.datum) as jahr
FROM `kunde`
LEFT JOIN `kalender` ON true
LEFT JOIN `verkauf`
ON year(kalender.datum)=year(verkauf.datum)
AND month(kalender.datum)=month(verkauf.datum) AND kunde.firma=verkauf.firma
WHERE MONTH(kalender.datum)>=' . sqsan($vonmonat) .
' AND MONTH(kalender.datum)<=' . sqsan($bismonat) .
' GROUP BY jahr, monat, firma';
Kommentar
-
onemorenerd half mir mit
$in = 'x1A';
$out = '\''.chr(hexdec(substr($in, 2))+96);
Danke vielmals (Backslashes im php gehen tatsächlich nicht)Zuletzt geändert von globqluqqlo; 11.03.2006, 18:35.
Kommentar
Kommentar