2013-04-05 103 views
0

我發現另一個技術已經發布了一個解決方案:水晶報表記錄段不返回相同的數據,SQL

新配方:

{} Product.Size <>「XSM」或ISNULL({產品。 }}

不幸的是,當預覽你的報告時,你會發現這是行不通的。這不是因爲我們的邏輯錯誤,而是我認爲是Crystal Reports中的一個錯誤。如果我使用完全相同的條件並使用查詢分析器或查詢工具將其應用於數據庫記錄,則會看到空白記錄。不幸的是,即使我們的公式表明他們應該,Crystal也不允許null值通過。

繞過這個錯誤的訣竅是在公式中放入IsNull()檢查FIRST。

因此,如果我們重新排列條件這樣:

ISNULL({Product.Size})或{Product.Size} <>「XSM」

工作就像一個魅力

__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ -

問題是,如果我選擇第二個OR語句({HiredRate.UTRANSDOC}startswith{?TransYN})的標準,並且第一個({HiredRate.UTRANSWEB}startswith{?WebYN})爲NO,那麼我只能得到一個記錄rd符合TransYN標準。如果在切換({HiredRate.UTRANSDOC}startswith{?TransYN})的公式中切換位置,我將獲得所有數據。

當我運行SQL查詢我得到的所有數據,無論他們是在什麼樣的順序,水晶預覽只給了我所有的數據從或部分第一。

脫穎而出看着從SQL數據的唯一的事情是,一個記錄水晶正在恢復有是在Transdoc場和Transweb字段爲空。所有其他記錄對Transdoc顯示YES,對Transweb字段顯示NULL。

這裏是水晶記錄選擇公式

{HiredRate.CONTSUPREF} startswith {?LanguageCombo} 
and {HiredRate.ONDATE} = {?ProjectDate} 
and {HiredRate.ACTVCODE}= "SIG" 
and {HiredRate.RESULTCODE} = "CLM" 
and (
     {HiredRate.UTRANSWEB}startswith{?WebYN} 
or {HiredRate.UTRANSDOC}startswith{?TransYN} 
or {HiredRate.UTRANLANL0}startswith{?LanloYN} 
or {HiredRate.UINTCONSEC}startswith{?InterpYN} 
or {HiredRate.UINTCONF}startswith{?IntConfYN} 
or {HiredRate.UINTOPI}startswith{?OPIYN} 
    ) 

這裏是SQL查詢水晶使用:

SELECT HiredRate.DEAR, HiredRate.CONTSUPREF, HiredRate.LASTDATE, HiredRate.CONTACT, HiredRate.USOURCLANG, HiredRate.UTARGLANG, HiredRate.UTRANSDOC, HiredRate.UTRANSWEB, HiredRate.UTRANLANL0, HiredRate.UINTCONSEC, HiredRate.UINTCONF, HiredRate.UINTOPI, HiredRate.ONDATE, HiredRate.ACTVCODE, HiredRate.RESULTCODE 
FROM GoldMine_Main.dbo.HiredRate HiredRate 
WHERE HiredRate.CONTSUPREF LIKE 'ENG>SPA%' AND (HiredRate.ONDATE>={ts '2012-04-01 00:00:00'} AND HiredRate.ONDATE<{ts '2013-04-06 00:00:00'}) AND HiredRate.ACTVCODE='SIG' AND HiredRate.RESULTCODE='CLM' AND (HiredRate.UTRANSWEB LIKE 'NO%' OR HiredRate.UTRANSDOC LIKE 'YES%' OR HiredRate.UTRANLANL0 LIKE 'NO%' OR HiredRate.UINTCONSEC LIKE 'NO%' OR HiredRate.UINTCONF LIKE 'NO%' OR HiredRate.UINTOPI LIKE 'NO%') 
ORDER BY HiredRate.DEAR, HiredRate.CONTACT 
+0

如果OR語句中的任何字段爲空,則Crystal將拋出異常並停止評估語句......這就是訂單重要的原因。嘗試在公式編輯器中將公式設置爲「空值的默認值」。 – Ryan 2013-04-05 17:32:52

+0

找到了解決方案 - – user2249939 2013-04-05 17:53:49

回答

1

發生這種情況,因爲{HiredRate.UTRANSWEB}爲空 - 因此表達式的其餘部分是在Crystal中評估爲null,即使(邏輯上)它不應該。

當前兩個or條件周圍交換,所述{HiredRate.UTRANSDOC}條件評估爲真和表達式的其餘部分被短路 - 這就是爲什麼記錄然後選擇。