SQLQuery列填充1而不是0

时间:2013-08-20 11:08:17

标签: mysql mysql-5.5

请考虑以下代码进行测试:

CREATE TABLE Mydatabase(
  TableID_bi int,
  EVENTS VARCHAR(200),
  email VARCHAR(200),
  Timedetail DATETIME
);

INSERT INTO `Mydatabase` (`TableID_bi`,`EVENTS`, `email`, `Timedetail`) VALUES
  (1, 'first','email@gmail.com','2013-06-15' ),
(2, 'first','email2@gmail.com', '2013-06-15'),
(3, 'second','email3@gmail.com', '2013-06-15'),
(4, 'second','email4@gmail.com', '2013-06-15'),
(5, 'third','email5@gmail.com', '2013-06-15');

我对代码所做的简要描述:

我为每个连接创建了一个视图,即第一个,第二个,第三个等 如下:(我没有选择UNION来支持所有查询的原因是因为我希望结果显示为列而不是行。)

create view firstview as 
SELECT  DATE(Timedetail) as Datefield1 ,
       count(Timedetail) as firstoccurances,
         Events  
FROM Mydatabase  
WHERE Events = "first" GROUP BY Datefield1 ;

同样适用于第二,第三和所有其他事件。

以下是我从视图中检索结果的方法:

SELECT a.Datefield1
       a.firstoccurances,
       b.secondoccurances,
       c.thirdoccurances

FROM   firstview a,
       secondview b,
       thirdview c

WHERE a.Datefield1 = b.Datefield2
AND   a.Datefield1 = c.Datefield3

简要介绍数据库中发生的事情:

我正在开发一个如上所述的同类大型数据库。例如,我从数据库中选择了以下日期范围:2013-07-01 to 2013年8月1日

现在,就第一和第二个事件而言,我在EVENTS列下的每个日期都列出了“第一”和“第二”值。成为 更精确的是,如果我使用COUNT()函数测试它,我可以看到如下结果:

首次连接:

TimeDetail  |  Number of first events
2013-07-01              4
2013-07-02              2
2013-07-03              6
 and so on

2013-08-01              5

第二次事件也是如此。然而,对于“第三”事件,它不一样。我在“事件”列下列出的“第三”事件只有几个 日期,例如2013-07-02和2013-07-03,我应该看到以下输出:

TimeDetail  |  Number of third events
2013-07-01              0
2013-07-02              1
2013-07-03              2
 and so on

2013-08-01              0

但我没有得到上述输出。相反,除“2013-07-02”和“2013-07-03”之外的所有其他日期值在“第三个数”下填充值1 事件栏。我可以知道为什么吗?

1 个答案:

答案 0 :(得分:1)

我不能假装我理解这个问题,但这可能是解决方案......

SELECT timedetail
     , SUM(CASE WHEN events = 'first' THEN 1 ELSE 0 END) first 
     , SUM(CASE WHEN events = 'second' THEN 1 ELSE 0 END) second
     , SUM(CASE WHEN events = 'third' THEN 1 ELSE 0 END) third
  FROM mydatabase 
 GROUP 
    BY timedetail;