我有一个我没有做的现有报告。这很复杂。它不使用命令函数,所以我不能直接更改SQL代码中的过滤器。我已经审查了几个链接,基本上说没有办法绕过这个,我将需要创建一个新的命令和重做报告。我想找到一个不需要我重做报告的解决方案。
我需要的逻辑是只选择只有一个实例的分包合同(不管是否批准),如果它们有两个实例关联,只选择已批准的那个
这是当前后台Crystal SQL
SELECT columns
from several tables joins etc
WHERE subcontract = '12345'--parameter entry
AND company=1 --parameter entry
我想添加这个逻辑,在一个正常的sql语句工作,但因为我不能修改水晶的sql我卡住了…
AND ((subcontract in (select subcontract from table
group by subcontract having count(*) = 1))
OR (subcontract in (select subcontract from table group by subcontract having count(*) > 1)
AND "approved = 'Y'))
我已经看过你的选择和组专家,但我只是没有到达那里。有没有人找到一些简单的变通方法?谢谢! !
编辑:我已经有一个涉及分包合同的选择专家,但我不知道如何添加我想要的东西,因为它是基于验证的,我想添加一个过滤器组件给它..
(
if (IsNull({?BeginSub}) or Trim({?BeginSub})="") then
true
else
{subcontract} >= Trim({?BeginSub})
) and
(
if (IsNull({?BeginSub}) or Left(Trim({?BeginSub}),3) in ["","zzz"]) then
true
else
{subcontract} <= Trim({?EndSub})
)
编辑更新:我已经找到了一种方法来获得我想要的水晶报告,但它抛出一个错误,当我从我的应用程序运行报告。我用我想要的条件创建一个命令,然后链接到command.subcontract=othertables.subcontract.
我找到我需要的了。我添加了以下sql表达式字段
(Select count(subcontracts) from subcontract table)
然后我在select expert
中添加了以下内容 if(({%SubContractCount} <>2) or ({%SubContractCount}>1 AND
approved = Y)) then true else false
谢谢! !