-1

参加の問題かもしれないと思っていましたか?Group byを試してみましたが、役に立ちませんでした...アドバイスをいただければ幸いです。以下にクエリを配置しました。

*詳細が不足していることをお詫びします-Med_Prof_Record_Noは一意の値であり、コードが乱雑であることはわかっています-しかし、これは私がここに着いたときにここにあったものです;-)また、これはsql 2000ボックスであるため、新しい構文は機能しません...結合を少しクリーンアップしましたが、元のクエリから離れすぎないようにします-

SELECT DISTINCT
    P.Last_name + ', ' + P.First_name AS Full_name,   
    P.Degree, 
    F.Med_Prof_Record_No, 
    F.Current_status, 
    F.Status_category, 
    F.Department_name, 
    F.Section, 
    F.SPHAffiliatedPhysiciansSurgeons AS Affiliated,
    S.Board_Name, 
    S.Specialty_Name,
    O.Office_name, 
    O.Address_1, 
    O.Address_2, 
    O.City, 
    O.State, 
    O.Zip_Code, 
    O.Phone_number_1, 
    O.Fax_number
FROM 
    Med_Prof P, Med_Prof_Facilities F, Med_Prof_Specialties S, Med_Prof_Offices O
WHERE         
    (F.Med_Prof_Record_No = P.Med_Prof_Record_No) AND 
    (F.Med_Prof_Record_No = S.Med_Prof_Record_No) AND
    (F.Med_Prof_Record_No = O.Med_Prof_Record_No) AND        
    <cfif URL.LastName is NOT "">(P.Last_name LIKE '#URL.LastName#%') AND</cfif>
    <cfif URL.Specialty is NOT "">(F.Section = '#URL.Specialty#') AND</cfif>
    <cfif URL.Group is NOT "">(O.Office_name LIKE '#URL.Group#%') AND</cfif>                
    (F.Status_category = 'active')
ORDER by Full_name
4

1 に答える 1

2

これが刺し傷です。これにより、どのオフィスなどを表示するか(この場合は任意のオフィスなど)をどのように決定するかが想定されます。これは一意であり、1人の人物のみを表します(最初は+が一意だP.Med_Prof_Record_Noと思いましたが、非常に危険なようです)。前提条件)、およびSQLServer2005以降を使用していること。最後に、適切に修飾されたオブジェクト名を使用してください。また、さまざまなレイジー暗黙結合の使用を停止してくださいLast_nameFirst_nameFROM foo, bar, blat, splunge

;WITH x AS
(
  SELECT 
    P.Last_name + ', ' + P.First_name AS Full_name,   
    P.Degree, 
    F.Med_Prof_Record_No, 
    -- other columns from F,
    S.Board_Name, 
    S.Specialty_Name,
    O.Office_name,
    -- other columns from O,
    rn = ROW_NUMBER() OVER (PARTITION BY P.Med_Prof_Record_No
      ORDER BY F.Current_status, S.Board_name, O.Office_name)
  FROM 
    dbo.Med_Prof AS P
  INNER JOIN 
    dbo.Med_Prof_Facilities AS F
    ON P.Med_Prof_Record_No = F.Med_Prof_Record_No
  INNER JOIN
    dbo.Med_Prof_Specialties AS S
    ON F.Med_Prof_Record_No = S.Med_Prof_Record_No
  INNER JOIN
    dbo.Med_Prof_Offices AS O
    ON F.Med_Prof_Record_No = O.Med_Prof_Record_No
  WHERE         
    <cfif ... AND</cfif>
    -- other <cfif> clauses
    (F.Status_category = 'active')
)
SELECT * FROM x WHERE rn = 1
ORDER BY Full_name;
于 2013-01-29T02:25:31.043 に答える