2011-11-21 110 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。我仍然希望他們在那裏,我只是不希望他們'通過聲明組合''他們'。 –