Sql server Crystal报表:SQL子查询问题,结果为“null”

Sql server Crystal报表:SQL子查询问题,结果为“null”,sql-server,crystal-reports,Sql Server,Crystal Reports,在SMS中运行以下SQL查询时,我正确地从patient_documents_1的第二个document_desc列中获取空值。这向我表明,针对特定患者存在的患者文档不包括所需的bh_pharm文档。太好了 SELECT patients.last_name, patients.first_name, patient_documents.document_description, patient_documents_1.document_description FROM patients IN

在SMS中运行以下SQL查询时,我正确地从patient_documents_1的第二个document_desc列中获取空值。这向我表明,针对特定患者存在的患者文档不包括所需的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
我怎样才能在水晶报告中做到这一点

我尝试的每件事都会导致一个空报告。或者我必须包括每个记录和每个文档描述。我只想让报告告诉我哪些患者缺少bh_pharm文件。Crystal Reports能否处理子查询或子报表中的“空”结果


提前感谢…

如果没有子查询的左连接,它会工作吗?Ie在删除连接和患者文档的所有引用后,您是否得到结果

如果没有,请确保您正在配置crystal reports以正确查询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月有时间戳?

打开crystal report,然后在那里而不是选择tables select命令,并在那里复制相同的查询


现在开始设计并生成报告。

从新报告开始

您需要添加到报告中的唯一表是patients表。如果使用别名,请确保在下面的查询中对其进行更改

添加SQL表达式以返回计数。当找不到具有正确描述的文档时,它将计算为零。复制下面的所有内容,包括括号。称之为DocumentCount

将筛选器添加到记录选择公式,以将其限制为要显示的筛选器

{%DocumentCount} = 0

无论我如何分解SQL查询,它都可以正常工作。基本上,我想做的是:一个愚蠢的例子,如果我的图书馆里有书,只告诉我书的清单,如果这些书都不是金银岛。若《金银岛》是其中的一本书,我不想要一个书单。你给我的任何关于Crystal Reports的工作示例都会帮助我走上正轨。谢谢,bf2020,这帮了我大忙。这份报告不完全是我需要完成的,但你回答了我的问题,这让我回到了正轨。再次感谢。嘿,Darryl Grimes,你能投赞成票或打分作为回答吗?我也试过了。我还尝试了一个子报告。我在上面的一个例子中解释了我的情况,回应了bf2020的回答。我尝试在一个子报告中使用select expert的公式显然失败了。。。“bhu pharm”不在[{patient_documents.document_description}]中。。。有没有办法在这个公式中动态创建现有文档描述的列表或数组?这是哪个版本的Crystal?你在使用命令吗?
{%DocumentCount} = 0