Sql 如何计算每个ID,每个类型的结果(1,2,3)有多少个ID被诊断?
我已经试过很多次了,但我不知道如何对每个技师的每个诊断结果(只有三种类型1、2、3)的答案进行分组?(例如,Technician ID 54有多少诊断结果1。) 我试着加入count函数,但它不起作用。有人能给我一些SQL方面的想法吗 这是我在数据库中找到的Sql 如何计算每个ID,每个类型的结果(1,2,3)有多少个ID被诊断?,sql,pivot,Sql,Pivot,我已经试过很多次了,但我不知道如何对每个技师的每个诊断结果(只有三种类型1、2、3)的答案进行分组?(例如,Technician ID 54有多少诊断结果1。) 我试着加入count函数,但它不起作用。有人能给我一些SQL方面的想法吗 这是我在数据库中找到的 TechnicianID FirstName ------------ ------------- 54 Wayne TechnicianID DiagnosisOutcomeID ------------ -----
TechnicianID FirstName
------------ -------------
54 Wayne
TechnicianID DiagnosisOutcomeID
------------ ------------------
54 1
54 2
54 1
54 3
The Result should be
TechnicianID FirstName DiagnosisOutcome=1 DiagnosisOutcome=2 DiagnosisOutcome=3
------------ -------------
54 Wayne
谢谢因为您没有提到任何RDBMS,下面的查询将适用于许多RDBMS
SELECT a.TechnicianID,
a.FirstName,
SUM(CASE WHEN b.DiagnosisOutcomeID = 1 THEN 1 ELSE 0 END) DiagnosisOutcomeID1,
SUM(CASE WHEN b.DiagnosisOutcomeID = 2 THEN 1 ELSE 0 END) DiagnosisOutcomeID2,
SUM(CASE WHEN b.DiagnosisOutcomeID = 3 THEN 1 ELSE 0 END) DiagnosisOutcomeID3
FROM Table1 a
INNER JOIN Table2 b
ON a.TechnicianID = b.TechnicianID
GROUP BY a.TechnicianID, a.FirstName
RDBMS
SELECT TechnicianID,
FirstName,
DiagnosisOutcomeID1,
DiagnosisOutcomeID2,
DiagnosisOutcomeID3
FROM
(
SELECT a.TechnicianID,
a.FirstName,
'DiagnosisOutcomeID' + CAST(b.DiagnosisOutcomeID AS VARCHAR(5)) AS DiagnosisOutcomeID
FROM Table1 a
INNER JOIN Table2 b
ON a.TechnicianID = b.TechnicianID
) data
PIVOT
(
COUNT(DiagnosisOutcomeID)
FOR DiagnosisOutcomeID IN (DiagnosisOutcomeID1,DiagnosisOutcomeID2,DiagnosisOutcomeID3)
) pvt
ORDER BY TechnicianID
- 您需要的是
案例
陈述
看看这个
SELECT T.FirstName
,SUM(CASE WHEN DiagnosisOutcomeID = 1 THEN 1 ELSE 0 END) AS OUTCOME1
,SUM(CASE WHEN DiagnosisOutcomeID = 2 THEN 1 ELSE 0 END) AS OUTCOME2
,SUM(CASE WHEN DiagnosisOutcomeID = 3 THEN 1 ELSE 0 END) AS OUTCOME3
FROM Tech T
INNER JOIN
Diagnosis D
ON T.TechnicianID = D.TechnicianID
GROUP BY
T.FirstName