Statistiken erstellen mit SQL anweisung



  • Wäre mir neu, dass man, ohne zu casten, Textspalten addieren kann...



  • Es geht aber, dort stehen ja nur Zahlen drin. Habe schon mit dieser Spalte ander Statistiken erstellen lassen und es funktioniert, daran liegt also nicht das Problem.



  • Ok, es geht!
    Der Fehler lag an einer Einstellung von DBChart, also so wie ich den Quelltext bzw. die SQL Anweisung gepostet habe funktionierts.
    Jetzt aber noch eine kleine Frage zum Schluss.

    In meinem DBChart werden nun unten (YAchse) die Monate in 01 02 03 04...angezeigt. Ich möchte aber das dort Jan Feb Mrz Apr steht, kann ich die Ergebnisse von der SQL Abfrage ändern, wenn ja wie????????



  • So spontan fallen mir da berechnete Felder ein.



  • Hallo

    also noch einmal

    akari schrieb:

    Ich habe dir doch bereits schon gesagt, das MONTH nur die reinen Monate vergleicht, aber keinen Unterschied zwischen den Jahren macht! Also wäre zum Beispiel der 2.10.2005 im selben Monat wie der 2.10.2006.
    Du must dann ebenfalls noch das Jahr vergleichen.

    bis bald
    akari



  • Und das heißt?



  • Hallo

    das sollte ungefähr so aussehen

    Select Sum(Dauer) AS XAchse, CONCAT(MONTH(Datum), '-', YEAR(Datum)) AS YAchse FROM Tabelle1 GROUP BY MONTH(Datum), YEAR(Datum) ORDER BY YEAR(Datum), MONTH(Datum) ASC
    

    bis bald
    akari



  • Mit "Und das heißt" war die Frage auf die Antwort Jow_M bezogen. Ich weiß selbst das ich die Jahre noch Filtern muss. Das ist aber jetzt nicht mein Problem.
    Ich möchte wissen wie ich die Anzeige im DBChart auslese und anders beschrifte z.B 01=Jan 02=Feb usw.

    Danke



  • Nun ja, im Feldeditor der Query klickst Du mit der rechten Maustaste und wählst 'Neues Feld'. Wichtig ist, dass Du 'berechnet' anwählst und den Typ auf String stelltst. Größe 3 sollte reichen (wenn Du immer nur 3 Buchstaben haben willst. Wenn Du das Feld angelegt hast, schaust Du die Methode GetText() an. Dort wertest Du die Monatszahl aus und gibst den Monatsstring in der Variable Text zurück.



  • Habe mir die Methode angeschaut. Habe aber dazu kein Bespiel gefunden und verstehe nicht so ganz wie ich nun die Variablen auslese und diese umbenenne bzw. in mein DBChart bringe.

    Bitte noch eine kleine Hilfe!

    Danke



  • Im DBChart steht sie dir wie eine ganz normales Feld aus der Tabelle zur Verfügung. In der GetText() mußt Du sie nur mit 'beleben'.

    Das könnte zB so aussehen:
    Das Feld habe ich 'Monatsname' benannt.

    void __fastcall TForm1::ADOQuery1MonatsnameGetText(TField *Sender,
    		AnsiString &Text, bool DisplayText)
    {
    	// Format YAchse MM-YYYY
    	AnsiString YAchse = ADOQuery1->FieldByName("YAchse")->AsString;
    	if (YAchse.AnsiPos("-"))
    	{
    		int iPos = YAchse.AnsiPos("-");
    		int iMonat = YAchse.SubString(1, pos - 1).ToInt(); // Monat als int ermitteln
    		YAchse = YAchse.Delete(1, pos); // YAchse enthält jetzt nur noch die Jahreszahl
    		switch (iMonat)
    		{
    		  case 1: Text = "Jan";
    		  break;
    		  // díe restlichen hier einfügen...
    		  case 12: Text = "Dez";
    		  break;
    		}
    		Text += " " + YAchse; // Jahreszahl wieder anhängen
    	}
    	else
    		Text = "FEHLER";
    }
    

    Da fehlt natürlich noch ein bißchen was an Überprüfungen... (es gibt z.B. ne böse Fehlermeldung, wenn ToInt() fehlschlägt)


Anmelden zum Antworten