0

以下のクエリは見苦しいものなので、読みやすいように十分な間隔を空けていることを願っています。このクエリは、特定の地域の出身である場合に、特定の病院を訪れる人々の割合を見つけます。たとえば、100 人が郡 X に住んでいて、20 人が病院 A に行き、80 人が病院 B に行く場合、クエリは出力します。この種のことは一体どのように行われているのですか?クエリを文書化する必要があるかどうか、またはクエリを明確にするためにできることは何でもお知らせください。

hospital A 20
hospital B 80

以下のクエリは、私が望んでいたとおりに機能しますが、考えさせられます:テーブル内のすべての郡に対してこれを行うにはどうすればよいでしょうか?

select  hospitalname, round(cast(counts as float)/cast(fayettestrokepop as float)*100,2)as percentSeen
from
(

SELECT     tblHospitals.hospitalname, COUNT(tblHospitals.hospitalname) AS counts, tblStateCounties_1.countyName,
                          (SELECT     COUNT(*) AS Expr1
                            FROM          Patient INNER JOIN
                                                   tblStateCounties ON Patient.stateCode = tblStateCounties.stateCode AND Patient.countyCode = tblStateCounties.countyCode
                            WHERE      (tblStateCounties.stateCode = '21') AND (tblStateCounties.countyName = 'fayette')) AS fayetteStrokePop
FROM         Patient AS Patient_1 INNER JOIN
                      tblHospitals ON Patient_1.hospitalnpi = tblHospitals.hospitalnpi INNER JOIN
                      tblStateCounties AS tblStateCounties_1 ON Patient_1.stateCode = tblStateCounties_1.stateCode AND Patient_1.countyCode = tblStateCounties_1.countyCode
WHERE     (tblStateCounties_1.stateCode = '21') AND (tblStateCounties_1.countyName = 'fayette')
GROUP BY tblHospitals.hospitalname, tblStateCounties_1.countyName

) as t 
order by percentSeen desc

編集: サンプル データ 以下のサンプル データは、最も外側のクエリ (そのas t order by部分) を除いたものです。

countsInTheCounty 列は、「tblStateCounties_1.countyName」の後の (select count(*)..) 部分です。

hospitalName      hospitalCounts      countyName      countsInTheCounty
st. james          23                 X               300
st. jude           40                 X               300

ここで、外側のクエリを使用して取得します

st james  0.076 (23/300)
st. jude  0.1333 (40/300)
4

1 に答える 1

1

Here is my guess. You'll have to test against your data or provide proper DDL + sample data.

;WITH totalCounts AS 
(
  SELECT StateCode, countyCode, COUNT(*) AS totalcount
  FROM dbo.Patient GROUP BY StateCode, countyCode
)
SELECT 
  h.hospitalName, 
  hospitalCounts = COUNT(p.hospitalnpi), 
  c.countyName, 
  countsInTheCounty = tc.totalCount, 
  percentseen = CONVERT(DECIMAL(5,2), COUNT(p.hospitalnpi)*100.0/tc.totalCount)
FROM 
  dbo.Patient AS p
INNER JOIN 
  dbo.tblHospitals AS h
  ON p.hospitalnpi = h.hospitalnpi
INNER JOIN 
  totalCounts AS tc
  ON p.StateCode = tc.StateCode
  AND p.countyCode = tc.countyCode
INNER JOIN 
  dbo.tblStateCounties AS c
  ON tc.StateCode = c.stateCode
  AND tc.countyCode = c.countyCode
GROUP BY 
  h.hospitalname, 
  c.countyName, 
  tc.totalcount
ORDER BY
  c.countyName,
  percentseen DESC;
于 2012-07-20T21:04:51.360 に答える