Tsql 尝试学习T-SQL子查询语法

Tsql 尝试学习T-SQL子查询语法,tsql,Tsql,我是新来的,所以希望我能正确地发布这篇文章 我有一个表PTC证书周期,希望获得表中每个患者ID的最大周期号。我可以让我的视图查看另一个视图,如下所示: 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

我是新来的,所以希望我能正确地发布这篇文章

我有一个表PTC证书周期,希望获得表中每个患者ID的最大周期号。我可以让我的视图查看另一个视图,如下所示:

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\u PERIOD.PATIENT\u ID在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。当子查询未引入EXISTS时,只能在选择列表中指定一个表达式。我已经使用了几个EXISTS statemsnt,如果它们运行的结果很差,列出了患者的所有周期号,而不仅仅是最大值。有人能给我指出正确的轨道吗?

当子查询用作表时,它们需要一个别名。。。只要添加任何内容。。。我通常用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

谢谢,但还是不行。我得到“Z附近的FROM子句出错。无法分析查询文本”试图添加AS,但没有go。试图添加第二组括号,但没有成功?