0

我是新来的,所以希望能正确发布。

我有一个 PTC_CERT_PERIOD 表,并且想要获取表中每个 PATIENT_ID 的 Max PERIOD_NO。我可以通过让我的视图查看下面的另一个视图来做到这一点:

SELECT TOP (100) PERCENT
    dbo.PTC_CERT_PERIOD.CERT_PERIOD_ID
,   dbo.PTC_CERT_PERIOD.PATIENT_ID
,   dbo.PTC_CERT_PERIOD.CERTIFICATION_DATE
,   dbo.PTC_CERT_PERIOD.CERT_END_DATE
,   dbo.PTC_CERT_PERIOD.PAY_SOURCE_POINTER
,   dbo.PTC_CERT_PERIOD.IS_ACTIVE
,   dbo.VW_SDH_CAS_MaxCertPeriod1.MaxCertPeriod
,   dbo.PTC_CERT_PERIOD.CREATE_DATE
FROM
    dbo.PTC_CERT_PERIOD
    INNER JOIN dbo.VW_SDH_CAS_MaxCertPeriod1
    ON dbo.PTC_CERT_PERIOD.PATIENT_ID = dbo.VW_SDH_CAS_MaxCertPeriod1.PATIENT_ID
       AND dbo.PTC_CERT_PERIOD.PERIOD_NO = dbo.VW_SDH_CAS_MaxCertPeriod1.MaxCertPeriod

但在我看来,我应该能够编写一个子查询来做同样的事情,但我无法为子查询找到正确的语法。我已经尝试了几个小时,我最近失败的迭代是:

SELECT
    CERT_PERIOD_ID
,   PATIENT_ID
,   CERTIFICATION_DATE
,   CERT_END_DATE
,   PAY_SOURCE_POINTER
,   IS_ACTIVE
,   CREATE_DATE
,   PERIOD_NO
FROM
    dbo.PTC_CERT_PERIOD
WHERE
    (PERIOD_NO IN 
        (
            SELECT
                PATIENT_ID AS MaxPtID
            ,   MAX(PERIOD_NO) AS MaxCertPeriod
            FROM
                dbo.PTC_CERT_PERIOD AS PTC_CERT_PERIOD_1
        )
    )

似乎我尝试的任何操作都会收到一条错误消息,例如“列 dbo.PTC-CERT_PERIOD.PATIENT_ID 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。只能在当子查询没有与 EXISTS 一起引入时的选择列表。我玩过几个 EXISTS statemsnts,如果他们运行结果很差,列出患者的所有 PERIOD_NO,而不仅仅是 Max。任何人都可以指出我正确的轨道上?

4

1 回答 1

1

当子查询用作表时,它们需要一个别名...只需添加任何内容...我通常使用 Z

SELECT  CERT_PERIOD_ID,  PATIENT_ID,  CERTIFICATION_DATE,   
   CERT_END_DATE, PAY_SOURCE_POINTER, IS_ACTIVE, 
   CREATE_DATE, PERIOD_NO
FROM dbo.PTC_CERT_PERIOD
WHERE PERIOD_NO IN 
    (SELECT PATIENT_ID MaxPtID,  
           MAX(PERIOD_NO) MaxCertPeriod
     FROM dbo.PTC_CERT_PERIOD) Z
于 2012-12-26T21:48:45.523 回答