-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

这是一个刺。这会假设您要如何决定要显示哪个办公室等(在这种情况下,它与任意性一样好),这P.Med_Prof_Record_No是唯一的并且仅代表一个人(起初我认为Last_name+First_name是唯一的,但这似乎很危险假设),并且您使用的是 SQL Server 2005 或更高版本。最后,请使用适当限定的对象名称请,请,请停止使用FROM 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 回答