0

私はここに新しいので、うまくいけばこれを正しく投稿しました。

テーブル PTC_CERT_PERIOD があり、テーブル内の各 PATIENT_ID の最大 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
        )
    )

「Column dbo.PTC-CERT_PERIOD.PATIENT_ID is invalid in the select list because it is not included in either an aggregate function or in the GROUP BY clause. で指定できる式は 1 つだけです。サブクエリが EXISTS で導入されていない場合の選択リスト. 私はいくつかの EXISTS ステートメントをいじりました. それらが実行された場合、結果はかなり離れており、Max だけでなく、患者のすべての PERIOD_NO をリストしています.右のトラック?

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 に答える