woo*_*gie 3 sql t-sql sql-server
怪物编辑:查询现在将运行但返回不正确的答案.添加了粗略的架构.PatientID不是tblPatientVisits表中的主键,因为同一个patientID可以多次出现.
列出每个县名称,但每个县名称(s.countyName)和count(t.countyname)为1
PatientVisits
PatientID int
PatientState varchar(2)
patientCounty varchar(3)
visitNumber int - PK
tblStateCounties
CPK stateCode varchar(2)
CPK countyCode varchar(3)
countyName varchar(25)
SELECT t.countyName,
count(t.countyName) as reAdmits ,count(s.countyName) as totalVisits
FROM (
SELECT countyName,count(countyName) AS readmitCounts
FROM (
SELECT tblPatient.patientID
,tblStateCounties.countyName
FROM tblPatient
INNER JOIN tblPatientVisits
ON tblPatient.patientID = tblPatientVisits.patientID
INNER JOIN tblStateCounties
ON tblPatientVisits.patientState = tblStateCounties.stateCode
AND tblPatientVisits.patientCounty = tblStateCounties.countyCode
GROUP BY tblPatient.patientID
,tblStateCounties.stateCode
,tblStateCounties.countyName
HAVING (COUNT(tblPatient.patientID) > 1)
AND (tblStateCounties.stateCode = '21')
) t
GROUP BY countyname
) t
INNER JOIN (
SELECT countyName
FROM (
SELECT tblStateCounties.countyName
,COUNT(tblStateCounties.countyName) AS counts
FROM tblPatient
INNER JOIN tblPatientVisits
ON tblPatient.patientID = tblPatientVisits.patientID
INNER JOIN tblStateCounties
ON tblPatientVisits.patientState = tblStateCounties.stateCode
AND tblPatientVisits.patientCounty = tblStateCounties.countyCode
WHERE (tblStateCounties.stateCode = '21')
GROUP BY tblStateCounties.countyName
) z
) s
ON s.countyName = t.countyName
group by s.countyname, t.countyname
Run Code Online (Sandbox Code Playgroud)
编辑:我有一个现在运行的查询,但它返回
很难说没有样本数据和期望的结果,但也许这就是你所追求的?
;WITH x AS
(
SELECT c.CountyName, v.patientCounty, v.patientState, p.patientID
FROM dbo.tblPatient AS p
INNER JOIN dbo.tblPatientVisits AS v
ON p.patientID = v.patientID
INNER JOIN dbo.tblStateCounties AS c
ON v.patientState = c.stateCode
AND v.patientCounty = c.countyCode
WHERE c.stateCode = '21'
),
y AS (SELECT CountyName, c = COUNT(*) FROM x GROUP BY CountyName),
z AS (SELECT CountyName, c = COUNT(PatientID) FROM x
GROUP BY CountyName, patientState, PatientID HAVING COUNT(*)>1)
SELECT y.countyName, reAdmits = MAX(COALESCE(z.c, 0)), totalVisits = MAX(y.c)
FROM y LEFT OUTER JOIN z
ON y.CountyName = z.CountyName
GROUP BY y.CountyName;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27205 次 |
| 最近记录: |