Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从三个表中提取数据,其中一个表作为中间表_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 从三个表中提取数据,其中一个表作为中间表

Mysql 从三个表中提取数据,其中一个表作为中间表,mysql,sql,sql-server,Mysql,Sql,Sql Server,在这种情况下请帮助我 我想要的输出应该显示在下表的示例中 点击 对于第一个细胞,我需要显示已经完成HIV过滤的男性,他还不到19岁。 下一个细胞也是一样,我需要显示已经做过HIV过滤的女性,她还不到19岁,下一排不同年龄组的女性也是一样。 性别和年龄组在表中,带有性别和DOB列 表BAT_TESDET和列RES_HIV中列出了已筛选的HIV患者总数 但是,这两个表没有任何匹配的主键。 然后,我得到了一个表名PRE_屏幕,其中包含捐助者MST和BAT_TESDET中的match列 以下是各表的主键

在这种情况下请帮助我

我想要的输出应该显示在下表的示例中

点击

对于第一个细胞,我需要显示已经完成HIV过滤的男性,他还不到19岁。 下一个细胞也是一样,我需要显示已经做过HIV过滤的女性,她还不到19岁,下一排不同年龄组的女性也是一样。 性别和年龄组在表中,带有性别和DOB列 表BAT_TESDET和列RES_HIV中列出了已筛选的HIV患者总数 但是,这两个表没有任何匹配的主键。 然后,我得到了一个表名PRE_屏幕,其中包含捐助者MST和BAT_TESDET中的match列

以下是各表的主键:

带有列捐赠者ID的表捐赠者\u MST 带有列显示ID和条形码的表格BAT_TESDET 带有列捐赠者ID和条形码的表PRE_屏幕 我确实尝试使用内部联接,但它不起作用。下面是我的代码

     SELECT 
     (CASE c.GENDER WHEN '1' THEN 1 ELSE 0 END) AS MALE,
     (CASE c.GENDER WHEN '2' THEN 1 ELSE 0 END) AS FEMALE,
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  < 19 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  BETWEEN 20 AND 24 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  BETWEEN 25 AND 29 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  BETWEEN 30 AND 34 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  BETWEEN 35 AND 39 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  BETWEEN 40 AND 44 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  BETWEEN 45 AND 49 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  BETWEEN 50 AND 54 THEN 1 ELSE 0 END ) 
     (CASE  WHEN (datediff(YEAR, c.DOB, getdate()))  > 55 THEN 1  ELSE 0 END ) 

    FROM  dbo.DONOR_MST c
    INNER JOIN dbo.PRE_SCREEN b
            ON c.DONOR_ID LIKE b.DONOR_ID
            INNER JOIN BAT_TESDET a
            ON b.BARCODE = a.BARCODE 
    WHERE 
    b.IS_ELIGIBLE = '1'
        AND b.SCR_DATE >= @STARTDATE
        AND b.SCR_DATE <= @ENDDATE  
我的问题:


如何链接这三个表这里是一个查询命题,以获取这些信息:

SELECT D.DOB
,SUM(CASE
WHEN D.GENDER = 'MALE' THEN 1
ELSE 0
END) AS [MALE]
,SUM(CASE
WHEN D.GENDER = 'FEMALE' THEN 1
ELSE 0
END) AS [FEMALE]
,COUNT(*) AS [TOTAL]
FROM DONOR_MST D
INNER JOIN PRE_SCREEN P ON P.DONOR_ID = D.DONOR_ID
INNER JOIN BAT_TESDET B ON B.BARCODE = P.BARCODE
GROUP BY D.DOB

希望这能对您有所帮助。

您尝试过内部联接吗?@Bulat,是的,我尝试过内部联接,但不起作用。请将您尝试的查询添加到question@Bulat已添加查询:为什么在join语句中使用LIKE?还有什么是不起作用的,您是否收到错误消息,或者没有得到预期的结果?