2011-11-21 112 views
0

我有一个表,包括名字,姓氏,和日期,就像这样:添加条件,此组声明

_________ 
| People |____________________________________ 
|----------------------------------------------| 
| first_name | last_name | date   | 
|----------------------------------------------| 
| Jerry   Garcia  01/01/2001  | 
| Adam   Garcia  01/02/2001  | 
| Hans   Fist  01/02/2001  | 
| Lucy   Fist  01/02/2001  | 
|______________________________________________| 

而且我有一群和ORDER BY语句是这样的:

$this->db->group_by("date, last_name"); 
$this->db->order_by('date ASC'); 

所以很自然地,你会希望它只给你一行两个加西亚和一行两个拳头。我想做什么,并记住这是一个非常简化的情况,是按姓氏分组,但如果last_name = 'Garcia'不要。所以你会看到garcias和结果集中只有一个拳头。

我该怎么做?

如果只有它是为GROUP BY date, last_name NOT 'Garcia'

回答

0

我自己想出了一个解决方案。对于任何遇到类似情况的人,只需在查询的SELECT部分使用CASE/WHEN声明。

您可以将它作为每行的布尔标志进行分组。

CASE `last_name` WHEN 'Garcia' THEN '1' END AS is_garcia 
1

简单也许你可以添加到您的第一个查询类似

WHERE name != 'Garcia' 

,然后执行

UNION SELECT * WHERE name = 'Garcia' 
0

你应该能够得到摆脱GROUP BY,只使用ORDER BY last_name DESC, date ASC

请注意,如果您有一个特定的问题,您正在尝试解决,发布与问题。你会得到更好的答案!

+0

我简化了我的测试用例并发布了可以想象的最具体的问题。你在说什么?您的解决方案将不起作用,因为'ORDER BY'不是'GROUP BY'。我确实提到了我希望将拳头分组。只是不是加西亚的。 –

+0

@ChrisG对不起,我没有得到你想要加西亚和只有一个拳头。咖啡前帮助失败! – hafichuk

+0

我提到发布特定问题的主要原因是我们可以获得您正在使用的上下文,并且可能能够提供替代(也许是非sql)答案。 – hafichuk

0

您可以使用HAVINGGROUP BY子句中的条件。然后,您可以使用关键字UNION加入两个结果集。

+0

如果我这样做,它将完全消除结果集中的Garcias。我仍然希望他们在那里,我只是不希望他们'通过声明组合''他们'。 –