在Crystal Reports中,我使用下面的查詢(針對Oracle數據庫)來生成一個報告,其中單場數據:運行Oracle SQL查詢過幾次約會
SELECT SUM(e1.ENT_LOCAL_AMOUNT+e1.ENT_DISCRETIONARY_AMOUNT) AS "Entitlement"
FROM CLAIM_PERIODS cp1
JOIN ENTITLEMENTS e1
ON cp1.CPE_REFNO=e1.ENT_CPE_REFNO
WHERE e1.ENT_REFNO=(SELECT MAX(to_number(e2.ENT_REFNO))
FROM ENTITLEMENTS e2
WHERE e1.ENT_CPE_REFNO=e2.ENT_CPE_REFNO
AND (e2.ENT_START_DATE <= {?HB_As_At_Date}
AND e2.ENT_END_DATE > {?HB_As_At_Date})
AND e2.ENT_CREATED_DATE<={?HB_As_At_Date})
AND cp1.CPE_CPA_CPY_CODE='HB'
這工作正常,並返回基於{?HB_As_At_Date}提供的單個整數值({?}語法是Crystal將參數值嵌入到SQL中的方式)。上述查詢的內容並不是我的問題 - 我想要做的是在多個不同的日期重複運行它,並將輸出傳遞給Crystal以供報表使用。
所以說,我要爲每星期一在今年9查詢運行,與2015年7月9日參數爲14/09/2015我目前運行Crystal報表一次,然後再等
我寧願將我的SELECT語句與根據需要列出的查詢結合使用 - 每次需要每個日期運行一次。隨着輸出是這樣的:
Date Entitlement
07/09/2015 450,000.00
14/09/2015 460,123.00
21/09/2015 465,456.00
28/09/2015 468,789.00
有人能指出我在正確的方向,我應該在這裏讀哪些關鍵字?我想可以直接生成一組日期並使用它們作爲子查詢來運行我的SQL,但我不確定從哪裏開始。
我能想到的唯一方法是創建存儲過程(SP)。你必須決定你可以使用的最大日期數,比如說5,然後把它們作爲參數傳遞給SP。在SP內部,您逐個檢查參數以查看它們是否具有值或NULL。爲每個具有值的參數運行一次查詢並返回結果。 –
非常感謝您的回覆。我無法在數據庫上創建存儲過程,但會查看是否可以安排。我會認爲有一個更好的方法來做 - 也會繼續調查。 – Sami
是的,我明白你的意思。我也儘可能地避免存儲過程。如果你真的想在查詢中做到這一點,有一個醜陋的方式來做到這一點。您必須重複查詢每個日期參數,然後使用'UNION'組合這些子查詢。你想讓我發佈這個答案嗎? –