2010-10-01 66 views
2

我想结合这两个语句,但似乎无法做到。如何结合这两个选择语句

我需要3列总数。一个用于总计,月份和损失。

这里是我迄今为止

SELECT Count(patient1.patient_id) AS total FROM patient AS total; 
SELECT Count(patient2.patient_id) AS losses, patient2.mo AS `month` 
FROM patient AS patient2 
WHERE patient1.rx_exp BETWEEN '2010-10-01' AND '2010-11-01'; 

编辑我必须在同一行上的所有三列。

+0

您的第一个查询没有日期约束。那是你想要的吗?因此,您将有全部患者与所有时间混合每月数据? – JoshD 2010-10-01 23:09:52

+0

我想要展示的是患者的预测,他们将在未来的一个月内失去。我想向他们展示患者的总数,然后计算第二个选择查询中的损失。 – jim 2010-10-01 23:11:38

+0

如果'PATIENT.mo'的值代表月份,为什么检查'PATIENT.rx_exp'? – 2010-10-01 23:20:15

回答

1
SELECT 
    Count(patient_id) AS total, 
    Count(case when rx_exp >= '2010-10-01' 
       AND rx_exp < '2010-11-01' then 1 end) AS losses, 
    'October' AS `month` 
FROM patient; 

你可以使用这个月,但可能没有点。

MAX(case when rx_exp >= '2010-10-01' 
    AND rx_exp < '2010-11-01' then patient2.mo end) AS `month` 
+0

您的查询是给我正确的总数。谢谢你马丁! – jim 2010-10-01 23:19:38

+0

马丁,在这种情况下'1'做了什么? – jim 2010-10-01 23:29:40

+0

'COUNT'返回传递给它的'NON NULL'值的数量。如果一行在你的目标月份或'NULL','CASE'语句将评估为'1'。 '1'本身并不重要。你可以使用'0','X','patient_id'或者任何'NON NULL'值并且获得相同的效果。 – 2010-10-01 23:33:08