当我在SMS中运行以下SQL查询时,我在第二个document_desc列(来自patient_documents_1)中正确获取“null”值。这表明,对于某个患者存在的患者文档不包括所需的bh_pharm文档。完美!
SELECT
patients.last_name, patients.first_name,
patient_documents.document_description,
patient_documents_1.document_description
FROM patients
INNER JOIN patient_documents ON patients.pat_id = patient_documents.pat_id
LEFT OUTER JOIN (
select patient_documents.pat_id, patient_documents.document_description
from patient_documents where patient_documents.document_description = 'bh_pharm' )
as patient_documents_1 ON patients.pat_id = patient_documents_1.pat_id
WHERE
( patient_documents.timestamp >= {ts '2015-02-01 00:00:00'} AND patient_documents.timestamp < {ts '2015-03-01 00:00:00'} ) AND
patient_documents_1.document_description is null
如何在Crystal Report中执行此操作?
我尝试的所有内容都会导致报告空白。要么我必须包括每个记录和每个文档描述。我只希望报告向我展示患者缺少“bh_pharm”文件的内容。 Crystal Reports可以处理子查询或子报表的“空”结果吗?
提前致谢...
答案 0 :(得分:0)
没有LEFT JOIN到子查询,它是否有效?也就是说,你在取消加入和所有对patient_documents_1的引用后得到了结果?
如果没有,请确保您正在配置水晶报告以正确查询SQL Server。
编辑: 这有用吗?它可能是花括号,但我也做了一些无偿的改写......
WITH patient_documents_1 as
(
select patient_documents.pat_id
from patient_documents
where patient_documents.document_description = 'bh_pharm'
group by patient_documents.pat_id
),
noBH as (
SELECT
patients.last_name,
patients.first_name,
patients.pat_id
FROM patients
LEFT OUTER JOIN patient_documents_1 on patients.pat_id = patient_documents_1.pat_id
WHERE
patient_documents_1.document_description is null
)
Select
noBH.*,
patient_documents.document_description
from noBH
INNER JOIN patient_documents ON noBH.pat_id = patient_documents.pat_id
WHERE
patient_documents.timestamp between '2015-02-01' and '2015-02-28'
哦,是的,是否有患者没有bh_pharm文件,但在2015年2月确实有时间戳?
答案 1 :(得分:0)
然后打开水晶报告,而不是选择表格select命令并在那里复制相同的查询。
现在去设计并生成报告。
答案 2 :(得分:0)
从新报告开始。
您需要添加到报告中的唯一表是patients
表。 (如果您使用别名,请确保在下面的查询中进行更改。)
添加SQL表达式以返回计数。当没有找到具有正确描述的文档时,它将评估为零。复制下面的所有内容,包括括号。称之为DocumentCount
。
(
select count(*)
from patient_documents as pd
where
pd.document_description = 'bh_pharm'
and pd.pat_id = patients.pat_id /* alias on "patients" must match */
)
在记录选择公式中添加一个过滤器,将其限制为您要显示的过滤器。
{%DocumentCount} = 0