2015-03-16 3 views
1

Есть ли способ группировать только определенные строки, когда задано определенное значение?Группа MySQL с помощью кондиционирования

т.е. у меня есть следующая таблица:

USERNO | FIRSTNAME | NAME | CUSTOMER | YEAR 
1  | Jon   | Snow | 0   | 2014 
2  | Williams | Spear | 1   | 2015 
1  | John  | Snow | 1   | 2015 
3  | Sam   | Wells | 0   | 2014 
3  | Sam   | Wells | 0   | 2013 

Когда CUSTOMER 1, он должен группа по USERNO. Поэтому я хочу получить следующий результат:

USERNO | FIRSTNAME | NAME | CUSTOMER | YEAR 
1  | Jon   | Snow | 1   | 2014 
2  | Williams | Spear | 1   | 2015 
3  | Sam   | Wells | 0   | 2014 
3  | Sam   | Wells | 0   | 2013 

Возможно ли это?

Заранее благодарен!

+0

Я не понимаю, какие значения вы группируете? почему 'Jon Snow 0' исчез из таблицы результатов? каковы критерии? – Alex

ответ

1

Вы можете использовать UNION для получения такого рода результатов, как это:

SELECT * 
FROM tablename 
WHERE CUSTOMER != 1 
UNION 
SELECT * 
FROM tablename 
WHERE CUSTOMER = 1 
GROUP BY USERNO; 

ИЛИ Вы можете также использовать CASE, но вы должны указать ELSE часть группировать записи, когда условие не выполнено:

SELECT * 
FROM tablename 
GROUP BY CASE WHEN CUSTOMER = 1 THEN USERNO ELSE columnname END; 

ИЛИ вы можете использовать GROUP_CONCAT как это, если вы хотите, чтобы ваши результаты должны быть сгруппированы в виде COMMA разделителей списка:

SELECT 
    GROUP_CONCAT(DISTINCT CAST(USERNO) AS CHAR), 
    GROUP_CONCAT(DISTINCT CAST(FIRSTNAME) AS CHAR), 
    GROUP_CONCAT(DISTINCT CAST(NAME) AS CHAR), 
    CUSTOMER, 
    GROUP_CONCAT(DISTINCT CAST(YEAR) AS CHAR) 
FROM tablename 
GROUP BY CUSTOMER; 
+0

Запрос сам по себе довольно большой, поэтому я боюсь, что «UNION» не вариант. Я попытался использовать 'CASE', но ничего не изменилось. Я думаю, что это потому, что пользователь «Джон» имеет «ЗАКАЗЧИК» '0' и' 1'. –

+0

Вы должны использовать 'UNION', или вы можете использовать' GROUP_CONCAT' с 'GROUP BY CUSTOMER' – Beginner

+0

Я использовал метод' CASE'. Я просто обновил код, поэтому «CUSTOMER» всегда будет одинаковым для всех пользователей с тем же «USERNO». Благодаря! –

Смежные вопросы