2016-10-17 4 views
0

私は大丈夫なSQLサーバにクエリを書きました。SQLサーバからMS Acessへのクエリのコピー

私はクエリに取り込む必要があるより多くのデータがあるので、このクエリをAccessで実行する必要があります。

しかし、AccessにSQLをコピーしても機能しない場合、クエリエラーで演算子が見つかりません。 CASTの最初の行に

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' 

WHENをエラーポイントとしてアクセスすることにより強調表示されます。

私は間違っていますか?私は

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

以下、上記IIFへのキャストを変更しようとした

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

は、上記のクエリ式の構文エラーになるクエリ式の構文エラー(カンマ)を与えます。

わかりましたので、これは私が今使っているものです:

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' 

エラーメッセージが今コメントをファイル「ファイルパス\ main.mdb

+0

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

+0

あなたはAccessのCASE構文を調べて、それをあなたですか? – GuidoG

答えて

1

あまりにも多くの問題や長すぎるを見つけることができませんでした。

MS Access SQL構文ではなくSQL Server構文を使用しています。

WHEN...CASEは、あなたの代わりにIIFまたはSWITCH

CASTも有効ではありません使用する必要があり、MS SQLアクセスでは有効ではありません。 CStr

GetDateを使用して文字列に変換することもできます。DATE()を使用してください。

あなたは182日間減算する場合、あなたはDATEADD('d', DATE() , -182)

を行う必要があります。しかし、これを処理するための最も便利な方法は、SQL ServerとないMS Accessの(上で実行されるパススルークエリは、このようにリンクされていない作るために、おそらくですテーブル)、SQL Serverの構文を維持することができます。そのパスを検索します。

+0

パススルーは私が探していたものです - ありがとう –

関連する問題