【发布时间】:2014-08-26 11:47:16
【问题描述】:
请在这种情况下帮助我。
我想要的输出应该显示在下面的表格示例中。
点击here
- 对于第一个单元格,我需要显示已完成 HIV 过滤且年龄小于 19 岁的男性。
- 下一个单元格也是如此,我需要显示已经完成 HIV 过滤且她小于 19 岁的女性,并且下一行的不同年龄组也是如此。
- 性别和年龄组在表 DONOR_MST 中,列 GENDER 和 DOB
- 已过滤 HIV 的患者总数在 BAT_TESDET 表的 RES_HIV 列中
- 但是,这两个表没有任何匹配的主键。
然后我确实得到了一个表名 PRE_SCREEN,其中包含 DONOR_MST 和 BAT_TESDET 中的匹配列
下面是每张桌子的PK:
- 具有 DONOR_ID 列的表 DONOR_MST
- 表 BAT_TESDET,列 DISP_ID 和 BARCODE
- 具有 DONOR_ID 列和 BARCODE 列的 PRE_SCREEN 表
我确实尝试过使用 INNER JOIN,但它没有用。下面是我的代码
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
我的问题:
如何链接三个表
【问题讨论】:
-
你尝试过 INNER JOIN 吗?
-
@Bulat,是的,我确实尝试过 INNER JOIN,但它没有用。
-
能否将您尝试的查询添加到问题中
-
@Bulat 已经添加了查询:)
-
为什么在join语句中使用LIKE?还有什么不起作用,您是否收到错误消息或没有得到您期望的结果?
标签: mysql sql sql-server