Syntaxprobleme SQL

bin jetzt auf ein für mich unlösbares Problem gestossen :frowning:

folgende SQL - Anweisung wird von Access generiert und tut das was ich will und zwar eine Spalte Rechnungsdatum + eine gewisse Tageanzahl zu rechnen und den heutigen Tag wieder abzuziehen die errechnete Zahl wäre die Anzahl überfälliger Tage …
wenn diese negativ ist soll ‚0‘ angezeigt werden…

hier mal die Select-Anweisung (MS-Access)

SELECT dbo_Stamm_Rg.Dokumentart, dbo_Stamm_Rg.Dokumentnr, dbo_Stamm_Rg.Tagenetto, dbo_Stamm_Rg.Datum, dbo_Stamm_Rg.verbucht, dbo_Stamm_Rg.Mahnstufe, IIf(Date()-[datum]+[tagenetto]>0,Date()-[datum]+[tagenetto],0) AS Tageüber
FROM dbo_Stamm_Rg
WHERE (((dbo_Stamm_Rg.verbucht)=„j“));

diese tut das alles sehr gut… leider bur unter Access … ich brauche das selbe jetzt in T-SQL … hier gibts ne Funktion Getdate() für das heutige Datum und ne Datedif function … alles toll … aber was mache ich mit dem iff da sagt er immer unbekannte funktion … und er meckert über das GroesserZeichen

Wer kann mir da mal auf die Sprünge helfen ???

Hallo,

ich habe zwar keine Ahnung was T-SQL ist, aber wenn das den SQL-Standard (ANSI-SQL) unterstützt kannst du es mal mit CASE versuchen:

SELECT dbo\_Stamm\_Rg.Dokumentart, 
 dbo\_Stamm\_Rg.Dokumentnr, 
 dbo\_Stamm\_Rg.Tagenetto, 
 dbo\_Stamm\_Rg.Datum, 
 dbo\_Stamm\_Rg.verbucht, 
 dbo\_Stamm\_Rg.Mahnstufe,
 (CASE WHEN (Date()-[datum]+[tagenetto]\>0) 
 THEN Date()-[datum]+[tagenetto]
 ELSE 0
 ) AS Tageüber
FROM dbo\_Stamm\_Rg
WHERE (((dbo\_Stamm\_Rg.verbucht)="j"));

Gruß,
Darkwing ^v^

meine Select Anweisung :

SELECT
Stamm_RG_Pos.RGNr,
Stamm_Rg.KDnr,
Stamm_Rg.Name1,
Stamm_Rg.Datum,
STR(Sum(Stamm_RG_Pos.Gesamtpreis), 15,2) AS Rgsumme,
Stamm_Rg.Tagenetto, [Datum]+[Tagenetto] as [zahlbarbis],
(case WHEN DATEDIFF(Day,Datum,GETDATE())-[Tagenetto] > 0
THEN 100
ELSE 0 ) AS Tageueber,
STR(Sum(Stamm_RG_Pos.Gesamtpreis)-[schongezahlt], 15,2) as Offen,
Stamm_RG.Dokumentart FROM Stamm_RG_Pos,
Stamm_RG
WHERE
Stamm_Rg.KDnr

Versuch mal

(case WHEN DATEDIFF(Day,Datum,GETDATE()) \> Tagenetto 
THEN 100
ELSE 0 ) AS Tageueber,

und „Str()“ dürfte T-SQL auch nicht kennen, da musst du mit „Convert“ oder „Cast“ arbeiten.

Gruß aus dem Norden
Reinhard Kraasch

er meckert immernoch über die Klammer vor dem ‚As‘

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Dann lass die Klammern doch mal weg - bzw. vereinfache den Ausdruck mal und teste ihn schrittweise mit dem Query Analyzer.

Gruß aus dem Norden
Reinhard Kraasch

Dann lass die Klammern doch mal weg - bzw. vereinfache den
Ausdruck mal und teste ihn schrittweise mit dem Query
Analyzer.

vielleicht bin ich ja zu blöd …

wenn ich die letzte Klammer weglasse meckert er über die AS Anweisung

wenn ich die Werte einzeln anzeigen lasse funzt das auch alles … bloss mit diesem Case komme ich nicht klar …

ich hab die SQL-Anweisung auch schon ein wenig vereinfacht …

derzeit ist das hier die Anweisung

SELECT
Stamm_RG_Pos.RGNr, Stamm_Rg.KDnr, Stamm_Rg.Name1,
Stamm_Rg.Datum, STR(Sum(Stamm_RG_Pos.Gesamtpreis), 15,2) AS Rgsumme,
Stamm_Rg.Tagenetto, [Datum]+[Tagenetto] as [zahlbarbis],
DATEDIFF(Day,Datum,GETDATE()) - [Tagenetto] AS Tageueber,
(case WHEN DATEDIFF(Day,Datum,GETDATE()) > Tagenetto THEN 100 ELSE 0) AS Tage,
STR(Sum(Stamm_RG_Pos.Gesamtpreis)-[schongezahlt], 15,2) as Offen,
Stamm_RG.Dokumentart FROM Stamm_RG_Pos, Stamm_RG

WHERE
Stamm_Rg.KDnr

die Sysntax war so nicht ganz richtig …

aber so funktioniert es hervorragend

(case WHEN DATEDIFF(Day,Datum,GETDATE()) > Tagenetto THEN 100 ELSE 0 END) AS Tage,

sprich das ENd hat gefehlt

danke an alle …