Borinator Geschrieben 13. Juli 2009 Teilen Geschrieben 13. Juli 2009 Hallo zusammen, ich danke schonmal im voraus an alle helfenden. Folgendes Problem: Das ist meine FUnktion ALTER FUNCTION dbo.VZA_FORMATDATE (@datum AS DATETIME, @str as varchar(254) ) RETURNS VARCHAR(254) AS BEGIN DECLARE @out as varchar(254) if @str = 'YYYY' set @out = convert(varchar(4), @datum, 112) if @str = 'MM' set @out = CONVERT(varchar(2), @datum, 10) if @str = 'YYYYMM' set @out = convert(varchar(6), @datum, 112) return @out END Den FUnktionsaufruf habe ich mir so vorgestellt. dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY') Das Problem ist das meine Funktion nicht auf 'Zaehldatum' zugreifen kann. Die Funktion erwartet einen manuel eingegebenes Datum für die Variable @datum. Ich will aber das sich die Funktion das datum selber aus einer spalte nimmt die ich ihm vorgebe. Verbesserungsvorschläge nehme ich gerne für meine Funktion an^^ Ich bin in MSSQL noch ein anfänger habe mich erst seit 2 wochen da eingearbeitet:D Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 13. Juli 2009 Teilen Geschrieben 13. Juli 2009 Du bist schon auf dem richtigen Weg. Deine Funktion kann in deinem Beispiel doch nur nicht wissen woher sie Zaehldatum nehmen soll. Versuch mal etwas in der Richtung von: SELECT Spalte1, Spalte2, dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY') from MyTable Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Borinator Geschrieben 13. Juli 2009 Autor Teilen Geschrieben 13. Juli 2009 Danke erstmal für die schnelle Antwort. Ich teile meiner Funktion schon mit woher er die daten kriegt. Ich habe eine Sicht geschrieben in der meine Funktion aufgerufen wird, aber leider kommt immer beim ausführen die Fehlermeldung ungültig spaltenname 'Jahr', 'Monat' usw. also praktisch dort wo meine Funktion aufgerufgen wird entstehen die Fehler. CREATE VIEW QBSUMMENMONAT_2 ( VONKNOTENNR, NACHKNOTENNR, JAHR, MONAT, JAHRMONAT, TBLARTNR, SORTER, SORTEROHNEART ) AS SELECT VonKnotenNr, NachKnotenNr, dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')) AS JAHR, -- hier wird dann die erste funktion aufgerufen und in Jahr gespeichert dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'MM')) AS MONAT, dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYYMM')) AS JAHRMONAT, tblArtNr, CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') | dbo.VZA_FORMATFLOAT(tblArtNr,'0000') AS VARCHAR(100)) AS Sorter, CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') AS VARCHAR(100)) AS SorterOhneArt FROM tblStreckenSummeTag GROUP BY VonKnotenNr, NachKnotenNr, JAHR, --hier kommt dann die fehlermeldung ungültige spaltenname und für die nächsten SPalten auch MONAT, JAHRMONAT, tblArtNr, Sorter, SorterOhneArt; Ich scheiter gerade nur an diesem view alles andere funktioniert einwandfrei soweit ich das sehe^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 13. Juli 2009 Teilen Geschrieben 13. Juli 2009 Nu schaem dich erstmal dafuer, dass du im ersten Post nicht dein Problem geschildert hast. Wenn du schon meinst, du wuesstest in welche Richtung es geht, dann kann man damit oftmals recht wenig anfangen Dein Problem ist die Abarbeitungsreihenfolge des Querys Hier nachzulesen Das Group by wird vor dem select angewandt, was erklaert wieso das Alias welches du im Select vergibst nicht schon im Group by bekannt ist. Das heisst dann fuer dich, dass du deine Funktionen im Group by nochmals aufrufen musst. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Borinator Geschrieben 13. Juli 2009 Autor Teilen Geschrieben 13. Juli 2009 HI ich muss ja schon sagen du antwortest in rekordzeit:D wenn ich dich richtig verstanden habe müsste meine Order By Klausel folgendermaßen aussehen: GROUP BY VonKnotenNr, NachKnotenNr, dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYY')) , dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'MM')) , dbo.VZA_NUMBER(dbo.VZA_FORMATDATE(ZaehlDatum,'YYYYMM')), tblArtNr, CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') | dbo.VZA_FORMATFLOAT(tblArtNr,'0000') AS VARCHAR(100)) , CAST(dbo.VZA_FORMATFLOAT(VonKnotenNr, '00000000000') | dbo.VZA_FORMATFLOAT(NachKnotenNr, '00000000000') | dbo.VZA_FORMATDATE(ZaehlDatum, 'YYYY') AS VARCHAR(100)) ; Ich habs ausprobiert. Ich kriege jetzt keine Fehlermeldung, aber du kennst das sicher keine Fehlermeldung heißt ja nicht das es keine fehler gibt^^ Ich muss erstmal die Datenbank austesten, ob alles so funktioniert wie es sein soll. Ich danke dir VIELMALS für deien Hilfe du hast mich viel weiter gebracht. :uli Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.