2013-04-17 62 views
0

我無法將SQL語句轉換爲FoxPro。我遇到的麻煩是我得到了錯誤代碼「Function name is missing)」,但我無法弄清楚問題出在哪裏或哪裏。麻煩在下面一行。任何幫助是極大的讚賞。錯誤信息「功能名稱丟失」。「在視覺foxpro 9.0

NVL(select sum(amount) from tpaymentitem where tpaymentitem.invoiceid = 0 and tpaymentitem.programid = (select max(tinvoiceitem.programid) FROM tinvoiceitem),0) as prepay,;

整個foxpro的代碼如下。

Select acc.accountid,; 
ti.invoiceid,; 
ti.invoicedate,; 
DATE() - ti.invoicedate as invage,; 
sum(NVL([subtotalregular],0) + NVL([fedtaxregular],0) + NVL([statetaxregular],0) + NVL([localtaxregular],0)) as invamount, ; 
NVL((select sum(amount) from tpaymentitem where invoiceid = ti.invoiceid),0) as paidamt,; 
(sum(NVL([subtotalregular],0) + NVL([fedtaxregular],0) + NVL([statetaxregular],0) + NVL([localtaxregular],0)) - NVL((select sum(amount) from tpaymentitem where invoiceid = ti.invoiceid),0)) as invbalance,; 
max(tii.programid) as programid,; 
NVL(select sum(amount) from tpaymentitem where tpaymentitem.invoiceid = 0 and tpaymentitem.programid = (select max(tinvoiceitem.programid) FROM tinvoiceitem),0) as prepay,; 
do while com.stchargeinterest = 1 AND acc.nofincharge = 0 ; 
    if DATE() - ti.invoicedate >= com.stmindaysforinterest ; 
    ROUND((sum(NVL([subtotalregular],0) + NVL([fedtaxregular],0) + NVL([statetaxregular],0) + NVL([localtaxregular],0)) - NVL((select sum(amount) from tpaymentitem where invoiceid = ti.invoiceid),0)) * ((com.stinterestrate/365) * DATE() - ti.invoicedate)),2); 
    ENDif ; 
ENDdo as financecharge,; 
com.stchargeinterest,; 
com.stinterestrate,; 
acc.nofincharge,; 
com.stmindaysforinterest,; 
com.stinterval; 
INTO cursor tmpbalance; 
FROM taccount acc; 
INNER JOIN tcompany com ON com.companyid=acc.companyid; 
LEFT JOIN tinvoice ti ON ti.accountid=acc.accountid; 
LEFT JOIN tinvoiceitem tii ON ti.invoiceid=tii.invoiceid; 
WHERE acc.accountid = m.cust_no AND acc.companyid = 1; 
GROUP BY acc.accountid,ti.invoiceid,ti.invoicedate,com.stinterval,com.stchargeinterest ,; 
com.stinterestrate,acc.nofincharge,com.stmindaysforinterest,acc.companyid 

我轉換的SQL代碼位於下方,最初是從存儲過程中捕獲的。

Select acc.accountid,ti.invoiceid,ti.invoicedate,DateDiff(d,ti.invoicedate,getdate()) as invage, 
sum(isnull([subtotalregular],0)+isnull([fedtaxregular],0)+isnull([statetaxregular],0) 
    +isnull([localtaxregular],0)) as invamount, 
ISNULL((select sum(amount) from tpaymentitem where invoiceid=ti.invoiceid),0) as paidamt, 
(sum(isnull([subtotalregular],0)+isnull([fedtaxregular],0)+isnull([statetaxregular],0) 
    +isnull([localtaxregular],0)) - 
ISNULL((select sum(amount) from tpaymentitem where invoiceid=ti.invoiceid),0)) as invbalance, 
max(tii.programid) as programid, 
ISNULL((select sum(amount) from tpaymentitem where invoiceid=0 and programid = max(tii.programid)),0) as prepay, 
CASE WHEN (com.stchargeinterest = 1) AND (acc.nofincharge=0) THEN 
    CASE WHEN DateDiff(d,ti.invoicedate,getdate()) >= com.stmindaysforinterest THEN 
     ROUND((sum(isnull([subtotalregular],0)+isnull([fedtaxregular],0)+isnull([statetaxregular],0)+isnull([localtaxregular],0)) 
      -ISNULL((select sum(amount) from tpaymentitem where invoiceid=ti.invoiceid),0)) 
      * ((com.stinterestrate/365) * DateDiff(d,ti.invoicedate,getdate())),2) 
    ELSE 0 END 
ELSE 0 END as financecharge,com.stchargeinterest ,com.stinterestrate, 
acc.nofincharge,com.stmindaysforinterest,com.stinterval 
INTO #tmpbalance 
FROM taccount acc 
INNER JOIN tcompany com ON com.companyid=acc.companyid 
LEFT JOIN tinvoice ti ON ti.accountid=acc.accountid 
LEFT JOIN tinvoiceitem tii ON ti.invoiceid=tii.invoiceid 
WHERE acc.accountid= @accountid AND acc.companyid = @companyid 
GROUP BY acc.accountid,ti.invoiceid,ti.invoicedate,com.stinterval,com.stchargeinterest , 
com.stinterestrate,acc.nofincharge,com.stmindaysforinterest,acc.companyid 
+0

我刪除了我的答案,因爲我不知道我在用'foxpro'做什麼或查詢打算做什麼。但是,請檢查您的括號。該錯誤消息表明您缺少該問題上的右括號。 – showdev

+0

謝謝你的幫助。 – BryansDriving

回答

0

我會翻譯這:

ISNULL((select sum(amount) from tpaymentitem where invoiceid=0 and programid = max(tii.programid)),0) as prepay 

就象這樣:

NVL((select sum(amount) from tpaymentitem where invoiceid=0 and programid = max(tii.programid)) ,0) as prepay 

編輯:

如何:

(sum(NVL(amount,0)) from tpaymentitem where invoiceid=0 and programid = max(tii.programid)) as prepay 

對不起,這是行不通的。這是主要的一個單獨的選擇陳述。

編輯2:

(select sum(NVL(amount,0)) from tpaymentitem where invoiceid=0 and programid = max(tii.programid)) as prepay 

可以嘗試簡化它,只是爲了解決:

(select sum(amount) from tpaymentitem where 1) as prepay 

我道歉,在黑暗中刺傷。

+0

仍然得到相同的錯誤。 – BryansDriving

+0

同樣的錯誤,當我嘗試'SELECT sum(NVL(金額,0))從tpaymentitem其中invoiceid = 0和programid =最大(tii.programid)作爲預付款,''我得到一個新的錯誤'命令包含無法識別的短語\關鍵字'這是因爲'where'子句中的'和' – BryansDriving

+0

我以爲你不需要'SELECT'。查詢開始時已經有一個。你說沒有它會得到相同的原始錯誤? – showdev