我提前道歉,我相信每个人都厌倦了加入问题。这让我感觉很愚蠢,因为它确实强调了我显然不理解我应该理解的连接方式。
快速总结是,我正在尝试获取所有医院的 3 列结果(医院名称、保留类型、保留数量),并且我希望每家医院始终显示 3 个指标中的每一个指标我正在寻找,即使他们没有记录。
我确信有一种比我正在做的方式(即临时表)更好的方法,但这是另一天的问题 =)。 临时表仅保存 3 条记录,您可以在 case 语句中看到保存的名称。
我尝试过各种版本的连接,但无法放弃正确的做法。这是我认为可以解决问题的方法。
CREATE TABLE #interventions (
intervention varchar(100)
)
-- Populate #interventions.
INSERT INTO #interventions SELECT DISTINCT intervention FROM tblHolds WHERE intervention NOT LIKE '%@%' AND intervention <> 'Physical Hold'
-- Final query.
SELECT hosp_name AS hospital, a.intervention, COUNT(b.intervention) AS intervention_cnt
FROM #interventions a
LEFT JOIN tblHolds b ON a.intervention = b.intervention
INNER JOIN tblHospitalList c ON b.hosp_id = c.hosp_id
GROUP BY hosp_name, a.intervention
ORDER BY hosp_name,
CASE
when a.intervention = 'Physical Restraint' THEN 1
when a.intervention = 'Seclusion' THEN 2
when a.intervention = 'Mechanical Restraint' THEN 3
ELSE 9
END
DROP TABLE #interventions
这可以通过使用交叉连接来解决,以获得医院和干预的每种组合。
CREATE TABLE #interventions (
intervention varchar(100)
)
-- Populate #interventions.
INSERT INTO #interventions (intervention) VALUES
('Physical Restraint' ),
('Seclusion'),
('Mechanical Restraint');
SELECT * FROM #interventions
-- SELECT DISTINCT intervention FROM tblHolds WHERE intervention NOT LIKE '%@%' AND intervention <> 'Physical Hold'
CREATE TABLE tblHolds (
intervention varchar(100),
hosp_id varchar(100)
)
INSERT INTO tblHolds (intervention,hosp_id) VALUES
('Physical Restraint','1' ),
('Seclusion','2'),
('Mechanical Restraint','2');
CREATE TABLE tblHospitalList (
hosp_name varchar(100),
hosp_id varchar(100)
)
INSERT INTO tblHospitalList (hosp_name,hosp_id) VALUES
('First Hospital','1'),
('Second Hospital','2');
-- Final query.
SELECT hosp_name AS hospital, a.intervention, COUNT(b.intervention) AS intervention_cnt
FROM #interventions a
CROSS JOIN tblHospitalList c
LEFT JOIN tblHolds b ON a.intervention = b.intervention AND b.hosp_id = c.hosp_id
GROUP BY hosp_name, a.intervention
ORDER BY hosp_name,
CASE
when a.intervention = 'Physical Restraint' THEN 1
when a.intervention = 'Seclusion' THEN 2
when a.intervention = 'Mechanical Restraint' THEN 3
ELSE 9
END
DROP TABLE #interventions