2017-04-08 42 views
1

我們有一個雲捐助者數據庫,我們在我的公益組織中使用,但它有一個XML API,可以讓我們與GUI之外的數據庫進行交互。所提供的文檔中的用例都是關於將數據庫與我們的網站進行集成,但我想用它來自動執行重複且耗時的報告。如何獲得使用SQL連接到XML API的值列表?

我發現我可以在連接URL中引入一條SQL語句來提取我們需要的數字,但是我必須連接並檢索報表中每個單元的信息,一次只提取一個數值,所以它需要一段時間。我正在使用啓用宏的電子表格和VBA來運行一堆API調用並將結果插入到單元格中。有沒有辦法檢索一個包含所有值的XML文檔,我可以重複一遍?我在想所有的API調用和等待時間都在減慢。

這是一個例子的連接字符串與登錄,並通過省略:

https://www.donorperfect.net/prod/xmlrequest.asp?login=*****&pass=*****&action= SELECT SUM(dpgift.amount) from dpgift INNER JOIN dpgiftudf ON dpgift.gift_id=dpgiftudf.gift_id WHERE dpgiftudf.bu2_category = '01WEB' AND dpgift.record_type = 'G' AND dpgift.gift_date BETWEEN '3/1/2017' AND '3/31/2017' 

只需在URL中的SQL是:

SELECT SUM(dpgift.amount) 
from dpgift 
INNER JOIN dpgiftudf ON dpgift.gift_id=dpgiftudf.gift_id 
WHERE dpgiftudf.bu2_category = '01WEB' 
AND dpgift.record_type = 'G' 
AND dpgift.gift_date BETWEEN '3/1/2017' AND '3/31/2017' 

這樣做的結果是:

<result><record><field name="" id="" value="2995"/></record></result> 

我必須爲報表中的每個單元格執行此操作,並且大約有500個單元格。

我想拉它,這樣得到的XML會給我所有bu2_category代碼的日期範圍內的所有值,而不會對每個單獨的值進行單獨調用(例如,一個花哨的SQL查詢使我一個包含所有字段和值的單個XML文檔)。

任何人都可以提出一個更好的SQL語句,我可以嘗試嗎?我是SQL和XML的新手。

回答

3

考慮刪除WHERE條件bu2_category並在類別中添加GROUP BY子句。然後,這將爲每個不同類別總計金額

SELECT dpgift.bu2_category, SUM(dpgift.amount) AS SumAmount 
FROM dpgift 
INNER JOIN dpgiftudf ON dpgift.gift_id=dpgiftudf.gift_id 
WHERE dpgift.record_type = 'G' 
AND dpgift.gift_date BETWEEN '3/1/2017' AND '3/31/2017' 
GROUP BY dpgift.bu2_category 
+0

太謝謝你了!它給了我所需要的。我現在在一秒鐘內檢索所有數據。現在我必須拋棄昨天編寫的所有代碼,並弄清楚如何實際解析XML。我相信,一旦我得到它的工作,它將閃電般快,因爲它在不到一秒的時間內獲得每一個總和(以前,你可以看到我的程序每秒鐘以一個單元的速率填充每個單元格)。這真讓人興奮。 – user6291867

+0

好聽!很高興我能幫上忙!如果解決方案有幫助,請接受(勾選標記到旁邊)以確認解決方案。 – Parfait