2012-03-12 27 views
0

次のクエリは、MS Accessで動作しますが、それはMS SQL Serverで動作しません:SQL ServerでのMS Accessで動作するこのSQLクエリがSQL Serverで動作しないのはなぜですか?

SELECT 
    tblSession.PatientID as PID, 
    max(tblSession.SessionAttend) - 
    min(tblSession.SessionAttend) + 1 as NumSA, 
    max(tblSession.SessionSched) - 
    min(tblSession.SessionSched) + 1 as NumSS FROM 
    (
    SELECT top 100 percent 
     tblSession.PatientID, 
     tblSession.SessionNumber, 
     tblSession.SessionDate, 
     tblSession.SessionAttend, 
     tblSession.SessionSched FROM 
     tblPatient INNER JOIN tblSession ON 
     tblPatient.PatientID = tblSession.PatientID) WHERE 
     (tblSession.SessionDate >= '12/8/2010') AND 
     (tblSession.SessionDate <= '5/18/2011') AND 
     (tblSession.Status = '2') ORDER BY 
      tblSession.PatientID, tblSession.SessionNumber 
) GROUP BY tblSession.PatientID 

を、それが「不適切な構文のキーワードの近くに 『グループ』。」エラーになりますGROUPキーワードの上にカーソルを置くと、「GROUPの近くに構文が正しくありません.AS、ID、またはQUOTED_IDが必要です」というヒントが表示されます。わかりません。誰でもこのクエリを動作させる方法を教えてもらえますか?

+5

あなたはサブクエリの別名を必要とする 'トングループ(...)からt.PatientIdによって' – dotjoe

+0

私は、ネストされたSELECTはエイリアスが必要だと思います。最後の行 ")GROUP BY tblSession.PatientID"には、 ")tblSession.PatientIDによるGROUP BYのようなものが必要です。私は間違っている可能性があります... –

+0

無関心な質問ですが、なぜあなたはそのTOP100パーセントを持っていますか? –

答えて

2

()で派生テーブルは、エイリアスを必要とし、SELECTリスト内の列参照が更新:

SELECT top 100 percent 
    ALIASNAME.PatientID as PID, 
    max(ALIASNAME.SessionAttend) - 
    min(ALIASNAME.SessionAttend) + 1 as NumSA, 
    max(ALIASNAME.SessionSched) - 
    min(ALIASNAME.SessionSched) + 1 as NumSS FROM 
    (
    SELECT top 100 percent 
     tblSession.PatientID, 
     ... 
     ... 
     ... 
     ... 
      tblSession.PatientID, tblSession.SessionNumber 
    -- This derived table needs an alias 
) ALIASNAME 
    GROUP BY ALIASNAME.PatientID 
+1

彼は 'tblsession'が解決しないと思っているので、フィールドエイリアスも更新する必要があります。 – JNK

+0

@JNKはい、ありがとうございました。 –

関連する問題