Sql 获取较大组的百分比
下面的查询有点难看,所以我希望我已经把它隔开了足够的空间,使它可读。查询将查找来自某个地区的特定医院就诊人数的百分比。例如,如果有100人住在X县,20人去医院A,80人去医院B,则查询输出。这类事情到底是怎么做的?如果我需要记录查询或我能做的任何事情来让它更清楚,请告诉我Sql 获取较大组的百分比,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,下面的查询有点难看,所以我希望我已经把它隔开了足够的空间,使它可读。查询将查找来自某个地区的特定医院就诊人数的百分比。例如,如果有100人住在X县,20人去医院A,80人去医院B,则查询输出。这类事情到底是怎么做的?如果我需要记录查询或我能做的任何事情来让它更清楚,请告诉我 hospital A 20 hospital B 80 下面的查询工作原理与我希望的完全相同,但它让我思考:如何为我表中的每个县都这样做 select hospitalname, round(cast(counts as
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
part)
County列中的Counts是“TBLStateCountries_1.countyName”之后的(选择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)
这是我的猜测。您必须根据您的数据进行测试,或者提供适当的DDL+示例数据
;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;
“循环”在大多数情况下应该像黑板上的钉子一样。当然,有一种方法可以解决这个问题,使用县名称作为一个附加分组,你能展示几行样本数据吗,这样我们就知道你是如何达到20/80的?当然,编辑在查询的主块下面。我没有回答这个问题吗@烧杯我不熟悉
coalesce
,我也不太确定它是如何工作的。