2016-10-17 1 views
0

Ich habe eine Abfrage in SQL Server geschrieben, die ordnungsgemäß ausgeführt wird.Kopieren einer Abfrage von SQL Server zu MS Access

Ich muss diese Abfrage in Access ausführen, da es mehr Daten gibt, die ich in die Abfrage ziehen muss.

Allerdings, wenn ich die SQL in Access kopieren, funktioniert es nicht, ich bekomme einen Syntaxfehler, Fehlender Operator in Abfrageausdruck.

SELECT main.Tbl_ServiceOrder.ServiceOrder 
, main.Tbl_Serviceorder.BusinessPartnerNumber 
, main.Tbl_ServiceOrder.ExternalPointofDeliverynumber 
, main.Tbl_ServiceOrder.ServiceProduct 
, main.Tbl_ServiceOrder.SOCreatedOn 
, main.Tbl_ServiceOrder.MainUserStatus 
, main.Tbl_ServiceOrder.MainUserStatusDesc 
, main.Tbl_ServiceOrder.ReasonCode 
, main.Tbl_ServiceOrder.ReasonCodeDesc 
, main.Tbl_ServiceOrder.SOActualFinishDate 
, main.Tbl_ServiceOrder.BasicStartDate 
,CAST(CASE WHEN reasoncode <> 'CMPL' THEN 'Pre Install' 
WHEN reasoncode = 'CMPL' and SOActualFinishDate < (getdate()-182) THEN 'SMART BAU' 
ELSE 'Post Install' END as Varchar) as SMRTPot 
FROM main.Tbl_ServiceOrder 
WHERE main.Tbl_ServiceOrder.ServiceProduct ='SMINSTALL' 
OR main.Tbl_ServiceOrder.ServiceProduct ='SMEXCHANGE' 

The WHEN auf der ersten Zeile des CAST wird durch Zugriff als Fehlerpunkt markiert.

Was mache ich falsch?

Ich habe versucht, unter

, IIF (reasoncode <> 'CMPL','Pre Install',(IIF SOActualFinishDate < (getdate()-182),'SMART BAU','Post Install')) as SMRTPot 

über die Besetzung an den IIF Ändern gibt Syntaxfehler (Komma) in Abfrageausdruck

IIF (reasoncode <> 'CMPL','Pre Install',(IIF SOActualFinishDate < (getdate()-182),'SMART BAU','Post Install')) as SMRTPot 

oben gibt Syntaxfehler in Abfrage-Ausdruck.

Okay, so ist es das, was ich bin jetzt mit:

SELECT main.Tbl_ServiceOrder.ServiceOrder 
, main.Tbl_Serviceorder.BusinessPartnerNumber 
, main.Tbl_ServiceOrder.ExternalPointofDeliverynumber 
, main.Tbl_ServiceOrder.ServiceProduct 
, main.Tbl_ServiceOrder.SOCreatedOn 
, main.Tbl_ServiceOrder.MainUserStatus 
, main.Tbl_ServiceOrder.MainUserStatusDesc 
, main.Tbl_ServiceOrder.ReasonCode 
, main.Tbl_ServiceOrder.ReasonCodeDesc 
, main.Tbl_ServiceOrder.SOActualFinishDate 
, main.Tbl_ServiceOrder.BasicStartDate 
,Switch(reasoncode <> 'CMPL', 'Pre Install', 
     reasoncode = 'CMPL' AND SOActualFinishDate < (Getdate() - 182), 'SMART BAU', 
     True, 'Post Install') as SMRTPot 
FROM main.Tbl_ServiceOrder 
WHERE main.Tbl_ServiceOrder.ServiceProduct ='SMINSTALL' OR main.Tbl_ServiceOrder.ServiceProduct ='SMEXCHANGE' 

Fehlermeldung jetzt Datei nicht gefunden ‚Dateipfad \ main.mdb

+0

http://stackoverflow.com/questions/14920116/does-ms-access-support-case-when-clause-if-connect-with-odbc –

+0

haben Sie die CASE-Syntax für Access nachgeschlagen und verglichen mit deine ? – GuidoG

Antwort

1

Zu viele Fragen und zu lang für einen Kommentar .

Sie verwenden SQL Server-Syntax und nicht MS Access SQL-Syntax.

WHEN...CASE ist nicht gültig in MS Access SQL, sollten Sie verwenden IIF oder SWITCH statt

CAST ist auch nicht gültig. Sie können in die Zeichenfolge mit CStr

konvertieren. GetDate ist auch nicht gültig, sollten Sie DATE() verwenden.

Wenn Sie 182 Tage subtrahieren wollen, dann sollten Sie das tun DATEADD('d', DATE() , -182)

aber die praktische Möglichkeit, dies zu umgehen ist wahrscheinlich Pass-Through-Abfrage zu machen, die auf SQL Server ausgeführt wird und nicht MS Access (also nicht an den verlinkten Tabellen), damit Sie Ihre SQL Server-Syntax beibehalten können. Suchen Sie diesen Pfad.

+0

Durchreichen ist, was ich gesucht habe - Danke –