2012-12-26 26 views
0

我在這裏是新的,所以希望已經正確發佈了這個。試圖學習T-SQL子查詢語法

我有一個表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 
     ) 
    ) 

好像什麼,我試圖得到一個錯誤信息,如「列dbo.PTC-CERT_PERIOD.PATIENT_ID是因爲它是在選擇列表中無效不包含在集合函數或GROUP BY子句中當子查詢沒有被EXISTS引入時,在選擇列表中只能指定一個表達式我玩過幾個EXISTS語句,如果它們運行的​​結果是方式的關閉,列出患者的所有PERIOD_NO,不只是最大值,任何人都可以指向正確的軌道嗎?

回答

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 
+0

謝謝,但它仍然無法正常工作。我在「Z」附近的FROM子句中得到「Error」。無法解析查詢文本「 – Chri3s

+0

試圖添加一個AS但不去。試圖添加第二組圓括號,但沒有去? – Chri3s