AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Probelm !!! -> Group by ?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Probelm !!! -> Group by ?

Ein Thema von HolgerCW · begonnen am 13. Dez 2006 · letzter Beitrag vom 13. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 08:57
Datenbank: ORACLE • Version: 9 • Zugriff über: TDatabase
Hallo zusammen,

komme einfach nicht weiter:

Was ist hier dran falsch:

SQL-Code:
SELECT EXTRACT(MONTH FROM ABLESEDATUM) AS MONAT, COUNT(ORT) AS ANZAHL FROM SYSSIGMA.ZST_2BMOBIL
WHERE AUFTRAGSARTEN_TEXT LIKE '%Turnuswechsel%AND
ABLESEDATUM <= '31.12.2006AND ABLESEDATUM >= '01.01.2006'
GROUP BY MONAT
Wenn ich anstatt 'MONAT' bei 'GROUP BY' das 'ABLESEDATUM' gruppiere ist alles OK. Wenn ich aber wie oben den 'MONAT' eintragen welchen ich über 'AS' definiere kennt er die Spalte 'MONAT' nicht.

Bitte helft mir

Gruss

Holger
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:02
Soweit ich weiß, kann man GROUP BY nur für Nicht-Gruppenfunktionen benutzen (also nicht für Count, etc.).
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:05
Hallo Holger,

SQL ist nicht gleich LocalSQL - du arbeitest mit LocalSQL und dort darf die GROUP BY Klausel lediglich Spalten- oder Korrelationsnamen aufweisen, keine Funktionsausdrücke.

Freundliche Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:13
Zitat:
SQL ist nicht gleich LocalSQL - du arbeitest mit LocalSQL
Achim traut sich nicht zu sage, daß du im Allgemeinen und speziell in diesem Fall auf die BDE verzichten solltest und auf andere, Oracle besser unterstützende, Komponenten umschwenken solltest!
Markus Kinzler
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:17
Danke für die Unterstützung:

Meine Lösung:

SQL-Code:
SELECT MONTH(ABLESEDATUM) AS MONAT, COUNT(AUFTRAG_ID) AS ANZAHL FROM SYSSIGMA.ZST_2BMOBIL
WHERE AUFTRAGSARTEN_TEXT LIKE '%Turnuswechsel%AND
ABLESEDATUM <= '31.12.2006AND ABLESEDATUM >= '01.01.2006'
GROUP BY MONTH(ABLESEDATUM)
So funktioniert es ...

Habe da aber noch eine Frage:

Diese TQuery habe ich mit einem TDBChart
verbunden. Am TDBChart werden nur auf der X-Achse 1,2,3,4,5,6,7,8,9,10,11,12 angezeigt. Wie bekomme ich dort Januar, Februar ... u.s.w. hin.

Gruss

Holger
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:27
Zwei Möglichkeiten:
1. Du verbastelst die Monatsnamen im SELECT. Oracle kenn ich nicht, aber unter MSSQL sieht das dann so aus:
SQL-Code:
select
  case Month(Datum)
    when 1 then 'Januar'
    when 2 then 'Februar'
    ...
    when 12 then 'Dezember'
    end as Monat,
...
from
...
group by
   case Month(Datum)
    when 1 then 'Januar'
    when 2 then 'Februar'
    ...
    when 12 then 'Dezember'
    end
2. Du erzeugst aus dem Monat (ist ja eine Zahl) ein Datum, z.B. '1.<Monat>.2006'. Im TChart wählst Du dann als Achsenformat 'mmm' oder so ähnlich. Ich habe dafür in MSSQL eine UDF geschrieben und gruppiere so:

SQL-Code:
select
  dbo.FirstOfMonth(Datum),
  Count (*)
from
...
group by dbo.FirstOfMonth(Datum)
Diese Funktion sieht so aus (Sind eigentlich zwei):
SQL-Code:
CREATE FUNCTION [dbo].[DateOnly] (@Date DateTime)
RETURNS Datetime AS
BEGIN
  Return cast (floor (cast (@Date as float)) as DateTime)
END

CREATE FUNCTION [dbo].[FirstOfMonth] (@Date DateTime)
RETURNS DateTime AS
BEGIN
  Return dbo.DateOnly (dateadd (day,-datepart (day,@Date) + 1, @Date))
END
DateOnly schnippelt den Zeit-Anteil weg.
FirstOfMonth zieht vom aktuellen Datum 'Tag-1' Tage ab. Logischerweise ist das dann der 1.des Monats.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:31
Hallo Markus,

Zitat von mkinzler:
Oracle besser unterstützende
oh Schreck - habe nur TDatabase gesehen, aber ist ja ORACLE. Bei ODBC ist LocalSQL kein Thema, ein Blick ins Oracle Handbuch genügt da. Um so mehr hast du Recht mit der BDE, aber wenn es ein Pflegeprojekt ist ...

@Holger: Setze einfach den Stil der Achsenbeschriftung auf Text und übersetze die Monatszahl in den MonthShortName (SysUtils) im Ereignis OnGetAxisLabel().

Freundliche Grüße
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#8

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:51
Meine Güte,

soviel Input.

Das schaue ich mir mal in Ruhe an. Werde das bestimmt brauchen können.

Damit es jetzt schnell geht:

Zitat:
@Holger: Setze einfach den Stil der Achsenbeschriftung auf Text und übersetze die Monatszahl in den MonthShortName (SysUtils) im Ereignis OnGetAxisLabel().
1. Habe den Stil auf Text gesetzt.
2. Wie mache ich die Umsetzung für die Übersetzung. Im OI oder im Code ? Und wie genau mache ich das ?

Gruss

Holger

P.S.: Delphi ist für mich relativ neu
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 09:51
Zitat von alzaimar:
Zwei Möglichkeiten:
1. Du verbastelst die Monatsnamen im SELECT. Oracle kenn ich nicht, aber unter MSSQL sieht das dann so 2. Du erzeugst aus dem Monat (ist ja eine Zahl) ein Datum, z.B. '1.<Monat>.2006'. Im TChart wählst Du dann als Achsenformat 'mmm' oder so ähnlich. Ich habe dafür in MSSQL eine UDF geschrieben und gruppiere so:...
3. Möglichkeit:
Du erzeugst dir eine Monatstabelle mit Nummer des Monats, Monatsname und Monats-Kurzname:
1 |Januar|Jan
2 |Februar|Feb
...
12|Dezember|Dez
Diese Tabelle wird dann mit deiner Ergebnistabelle mit INNER JOIN verbunden.
Ich würde die Monatsnamen gleich in Deutsch, Englisch und Französisch vorsehen.
Andreas
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#10

Re: SQL Probelm !!! -> Group by ?

  Alt 13. Dez 2006, 10:07
Alles klar, das mit case funktioniert nicht ...

Da sagt er immer 'Dezmeber' ist kein gültiger Gleitkommawert ???

Vielleicht kann man mir am schnellsten mit der Umwandlung in Delphi helfen. Wie setze ich das genau um.

Dieses hier:

Zitat:
2. Wie mache ich die Umsetzung für die Übersetzung. Im OI oder im Code ? Und wie genau mache ich das ?
Neue Tabellen wollte ich für Monate jetzt nicht anlegen.

Gruss

Holger
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz