Sql 如何计算每个ID,每个类型的结果(1,2,3)有多少个ID被诊断?

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 ------------ -----

我已经试过很多次了,但我不知道如何对每个技师的每个诊断结果(只有三种类型1、2、3)的答案进行分组?(例如,Technician ID 54有多少诊断结果1。)

我试着加入count函数,但它不起作用。有人能给我一些SQL方面的想法吗

这是我在数据库中找到的

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