2

私はいくつかの集計と CTE の投稿を調査しましたが、最小値を CTE から追加の (非 CTE) 外部テーブルに更新するための解決策を見つけていません。これは SQL 2008 (Microsoft 管理スタジオ) を使用しています。予約テーブルの日付と請求テーブルのサービスの日付を組み合わせて、それらを患者テーブルのフィールドと照合しています。New Patient Date というフィールドが空白の場合は、他の 2 つのテーブルの最も早い日付で更新したいと考えています。それらはすべて、チャートまたはチャート番号と呼ばれる共通の ID で結合されました。これがコードです...洞察はありますか?

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
4

1 に答える 1

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

WITH 部分はそのままで、UPDATE 部分を少し修正。サブクエリでは、CTE テーブル全体で最小の日付を取得し、該当する場所を更新します (ISNULL 条件付け)。

于 2012-10-24T14:45:03.623 に答える