2

我已經研究了一些聚合和CTE後,但還沒有找到解決方案,從CTE更新最小值到附加(非CTE)外部表。這是使用SQL 2008(微軟管理工作室)。我將來自預約表的日期,來自結算表的服務的日期合併,然後與患者表中的字段進行交叉檢查。如果名爲New Patient Date的字段爲空,我想用其他兩個表中的最早日期更新它。他們都加入了一個叫做圖表或圖表編號的共同ID。這裏是代碼...任何見解?聚合CTE和更新查詢

WITH New_Patients (chart_nbr, First_Visit) 
    AS 
    (SELECT A.[Chart], MIN(A.[Appt Date]) 
     FROM Appointment AS A, Patient AS P 
     WHERE A.[Chart] = P.[Chart Number] 
     AND A.[Appt Date] IS NOT NULL 
     GROUP BY A.[Chart] 

    UNION 

    SELECT BD.[Chart], MIN(BD.[Service Date 1]) 
    FROM [Billing Detail] AS BD, Patient AS P 
    WHERE BD.[Chart] = P.[Chart Number] 
     AND [Transaction Code] IN 
     ('99201', '99202', '99203', '99204', '99205', '99211', '99212', '99213', 
     '99214', '99215', '99241', '99242', '99243', '99244', '97001', '97002') 
     AND BD.[Service Date 1] IS NOT NULL 
    GROUP BY BD.[Chart] 

    UNION 

    SELECT P.[Chart Number], P.[New Patient Date] 
    FROM Patient AS P 
    GROUP BY P.[New Patient Date], P.[Chart Number] ) 

UPDATE [Patient]  
SET Patient.[New Patient Date]=MIN(First_Visit) 
FROM Patient AS P, New_Patients AS NP 
WHERE P.[Chart Number] = NP.chart_nbr 
    AND P.[New Patient Date]IS NULL 

回答

0

乾杯,如果我的理解是正確的,我會解決這個問題如下:

WITH New_Patients (chart_nbr, First_Visit) 
    AS 
    (SELECT A.[Chart] as chart_nbr, MIN(A.[Appt Date]) as First_Visit 
     FROM Appointment AS A, Patient AS P 
     WHERE A.[Chart] = P.[Chart Number] 
     AND A.[Appt Date] IS NOT NULL 
     GROUP BY A.[Chart] 
    UNION 
    SELECT BD.[Chart], MIN(BD.[Service Date 1]) 
    FROM [Billing Detail] AS BD, Patient AS P 
    WHERE BD.[Chart] = P.[Chart Number] 
     AND [Transaction Code] IN 
     ('99201', '99202', '99203', '99204', '99205', '99211', '99212', '99213', 
     '99214', '99215', '99241', '99242', '99243', '99244', '97001', '97002') 
     AND BD.[Service Date 1] IS NOT NULL 
    GROUP BY BD.[Chart] 
    UNION 
    SELECT P.[Chart Number], P.[New Patient Date] 
    FROM Patient AS P 
    GROUP BY P.[New Patient Date], P.[Chart Number] 
) 
UPDATE P SET P.[New Patient Date] = ISNULL(P.[New Patient Date], MIN(NP_group.First_Visit)) 
from [Patient] P 
left join 
( 
    select min[First_date) as First_Visit, chart_nbr 
     from New_Patients 
      group by chart_nbr 

) NP_group ON P.[Chart Number] = NP_group.chart_nbr 

與部分保持不變,UPDATE部分略作修改。在子查詢中,您可以在CTE表中獲得最短日期,然後更新適用的位置(ISNULL條件)。