Sql server 使用Where和Count from乘法表

Sql server 使用Where和Count from乘法表,sql-server,Sql Server,我有两张桌子 问题 列:患者编号、遭遇日期、诊断1、诊断2 程序 列:患者编号、程序代码 我试图从问题表中计算具有特定诊断的唯一客户机的数量,并从程序表中计算具有特定程序的唯一客户机的数量 我使用where作为两者的内部连接,但是当我运行查询时,计数比我只计算具有特定诊断的客户机的计数要大,我认为这是错误的 select (select COUNT(DIAGNOSIS_1) From Problem, Procedure where problem.PATIENT_NO=procedure.

我有两张桌子

问题

列:患者编号、遭遇日期、诊断1、诊断2

程序

列:患者编号、程序代码

我试图从问题表中计算具有特定诊断的唯一客户机的数量,并从程序表中计算具有特定程序的唯一客户机的数量

我使用where作为两者的内部连接,但是当我运行查询时,计数比我只计算具有特定诊断的客户机的计数要大,我认为这是错误的

select (select  COUNT(DIAGNOSIS_1) From Problem, Procedure  where problem.PATIENT_NO=procedure.PATIENT_NO and problem.ENCOUNTER_DATE between '10/1/15' and '12/31/15' and problem.DIAGNOSIS_1 IN ( 'Z68.53', 'Z68.54', 'O99.210', 'E66.9', 'E66.3') and Procedure.PROCEDURE_CODE IN ( 'TS141', 'TS140')) 
 + (select  COUNT(Diagnosis_2) From Problem, Procedure  where problem.PATIENT_NO=Procedure.PATIENT_NO and problem.ENCOUNTER_DATE between '10/1/15' and '12/31/15' and problem.DIAGNOSIS_2 IN ( 'Z68.53', 'Z68.54', 'O99.210', 'E66.9', 'E66.3') and Procedure.PROCEDURE_CODE IN ( 'TS141', 'TS140')) 

如果我理解正确的话,那么你可能在寻找这个-

SELECT
    COUNT(pr.Patient_NO)
FROM Problem
INNER JOIN [Procedure] pr
    ON problem.PATIENT_NO = pr.PATIENT_NO
WHERE pr.ENCOUNTER_DATE BETWEEN '10/1/15' AND '12/31/15'
AND (
   pr.DIAGNOSIS_1 IN ('Z68.53', 'Z68.54', 'O99.210', 'E66.9', 'E66.3')
   AND pr.DIAGNOSIS_2 IN ('Z68.53', 'Z68.54', 'O99.210', 'E66.9', 'E66.3')
)
AND pr.PROCEDURE_CODE IN ('TS141', 'TS140')

假设你试图计算患者是否符合特定标准,这可能对你有用

SELECT COUNT(DISTINCT pbm.Patient_NO)
FROM   Problem pbm
    JOIN [Procedure] pdr ON pbm.Patient_NO = pdr.Patient_NO
WHERE  pbm.ENCOUNTER_DATE BETWEEN '10/1/15'
                            AND     '12/31/15'
    AND (pbm.DIAGNOSIS_1 IN ('Z68.53','Z68.54','O99.210','E66.9','E66.3')
            OR pbm.DIAGNOSIS_2 IN ('Z68.53','Z68.54','O99.210','E66.9','E66.3'))
    AND pdr.PROCEDURE_CODE IN ('TS141','TS140')

您是否有第三个表名为patient?我没有第三个表。如果有TS141和TS140,但它们位于不同的行中,您是否可以计算程序代码列?就像有两行一样,患者编号相同,如果一行是TS141,另一行是TS140,那么计数会增加1?(如果这能更好地解释的话)有可能。。可能需要一个单独的查询来获取单独的计数并将其合并。。我来看看