2011-05-20 19 views
0

我只需要對特定數據應用組。條件組

爲前:

id name 
1 xx 
2 xx 
3 xx 
4 yy 
5 yy 
6 zz 

,並通過到xx應用組之後,應該像

1 xx 
4 yy 
5 yy 
6 zz 
+0

TABLE STRUCTURE ?? AND DATA – diEcho 2011-05-20 10:50:13

+0

1.感謝先前的答覆者,並帶有複選標記2.詳細解釋如何對行進行分組 – zerkms 2011-05-20 10:50:31

+3

@diEcho:我需要你的衣服,靴子和你的摩托車 – zerkms 2011-05-20 10:51:35

回答

2

我會用一個UNION

SELECT MIN(id), name 
FROM MyTable 
WHERE name = 'xx' 
GROUP BY name 

UNION 

SELECT id, name 
FROM MyTable 
WHERE name <> 'xx' 

,但無更多信息繼續這很可能是錯誤的。

提示 - 不要以爲有人知道你在說什麼,有時他們會。但總是儘量用盡可能多的細節拼寫出來。你會得到更有見地的答案,更多的人會傾向於提供幫助。

0

由於您似乎想要'xx'的ID的最小值,'yy'的ID的原始值和'zz'的ID的最大值(編輯:儘管我現在看到存在但只有一個'zz'的條目,所以它可能是MIN而不是MAX,或者它可能是未分類的),我們不能確切地爲你概括。

SELECT MIN(ID) AS ID, Name 
    FROM AnonymousTable 
WHERE Name = 'xx' 
GROUP BY Name 
UNION 
SELECT ID  AS ID, Name 
    FROM AnonymousTable 
WHERE Name = 'yy' 
UNION 
SELECT MAX(ID) AS ID, Name 
    FROM AnonymousTable 
WHERE Name = 'zz' 
GROUP BY Name 

這適合問題中給出的數據。你可能也有一個兩分支UNION'yy'而不是'yy'對待不同。

你也許能夠在一個更好的定義,更系統的方案中使用計算列:

SELECT CASE Name WHEN 'yy' THEN ID ELSE 1 END AS Pseudo_ID, Name -- , COUNT(*) AS number 
    FROM AnonymousTable 
GROUP BY Pseudo_ID, Name 

您通常會使用一些聚合函數(如COUNT)在選擇列表中,值得一GROUP BY子句;否則,您可以使用簡單的DISTINCT來消除重複項。

+0

如何在教條中應用聯合? – JohnnyeM 2011-05-20 12:08:36

+0

@JohnnyeM:我必須通過閱讀手冊找出 - 有沒有一些問題阻止你這樣做?什麼是[Doctrine](http://www.doctrine-project.org/)?如果你想在Doctrine中找到解決方案,至少應該在問題中提及它,如果不添加標籤。 – 2011-05-20 12:22:38

-1

從ID按順序選擇不同的ID,名稱順序;