我在 MS SQL Server 中有两张表,一张是护理人员的表,另一张是患者的表。每个病人都被分配了一些护理人员
╔════════════════╦══════════════════╦════════════════════╦═════════════════╗
║ Patient Name ║ Primary Carer ║ Secondary Carer ║ Tertiary Carer ║
╠════════════════╬══════════════════╬════════════════════╬═════════════════╣
║ Joe Bloggs ║ John Smith ║ Oscar Wild ║ Tom Cruise ║
║ Mary Sue ║ John Smith ║ Matt Smith ║ Peter Pan ║
║ Peter Parker ║ John Smith ║ Oscar Wild ║ Matt Smith ║
╚════════════════╩══════════════════╩════════════════════╩═════════════════╝
我希望从我的护理人员表中选择所有记录,然后计算该护理人员在患者表中担任一级、二级或三级护理人员的次数,包括那些未分配给任何人的护理人员。
例如;
╔═══════════════╦═══════════════════════╦═════════════════════════╦═══════════════════╗
║ Carer ║ Primary Carer Freq ║ Secondary Carer Freq ║ Third Carer Freq ║
╠═══════════════╬═══════════════════════╬═════════════════════════╬═══════════════════╣
║ John Smith ║ 3 ║ 0 ║ 0 ║
║ Oscar Wilde ║ 0 ║ 2 ║ 0 ║
║ Tom Cruise ║ 0 ║ 0 ║ 1 ║
║ Matt Smith ║ 0 ║ 1 ║ 0 ║
║ Peter Pan ║ 0 ║ 0 ║ 1 ║
║ Barry White ║ 0 ║ 0 ║ 0 ║
╚═══════════════╩═══════════════════════╩═════════════════════════╩═══════════════════╝
感谢您的帮助!
最佳答案
您可以使用:
<强> SqlFiddleDemo
SELECT
[name]
,[Primary Carer Freq] = COUNT(p1.[Primary Carer])
,[Secondary Carer Freq] = COUNT(p2.[Secondary Carer])
,[Third Carer Freq] = COUNT(p3.[Tertiary Carer])
FROM carers c
LEFT JOIN patients p1
ON p1.[Primary Carer] = c.[Name]
LEFT JOIN patients p2
ON p2.[Secondary Carer] = c.[Name]
LEFT JOIN patients p3
ON p3.[Tertiary Carer] = c.[Name]
GROUP BY [name];
数据:
CREATE TABLE patients([Patient Name] VARCHAR(100),
[Primary Carer] VARCHAR(100),
[Secondary Carer] VARCHAR(100),
[Tertiary Carer] VARCHAR(100) );
INSERT INTO patients
SELECT 'Joe Bloggs', 'John Smith', 'Oscar Wild', 'Tom Cruise'
UNION ALL SELECT 'Mary Sue', 'John Smith', 'Matt Smith', 'Peter Pan'
UNION ALL SELECT ' Peter Parker', 'John Smith', 'Oscar Wild', 'Matt Smith';
CREATE TABLE carers(Name VARCHAR(100));
INSERT INTO carers(Name)
SELECT 'John Smith'
UNION ALL SELECT 'Oscar Wilde'
UNION ALL SELECT 'Tom Cruise'
UNION ALL SELECT 'Matt Smith'
UNION ALL SELECT 'Peter Pan'
UNION ALL SELECT 'Barry White';
编辑:
如果您想要组合结果,请使用+
:
SELECT
[name]
,[Primary&Secondary Carer Freq] = COUNT(p1.[Primary Carer]) + COUNT(p2.[Secondary Carer])
,[Third Carer Freq] = COUNT(p3.[Tertiary Carer])
关于sql-server - SQL 连接和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32938024/