2013-06-07 3 views
1

У меня есть таблица, в которую я группируюсь по одному столбцу, а затем я выводя различные значения и количество этих значений.mysql: значения столбца как имя столбца в результате выбора

activty | sum 
------------- 
Form | 1 
Login | 4 
Reg  | 3 

вот пример кода: http://sqlfiddle.com/#!2/c6faf/2/0

, но я хочу, различные значения Т.П. имена столбцов с одной строки значений (счет).

так:

Form | Login | Reg 
------------------ 
    1 | 4 | 3 

я попробовал операцию PIVOT, но я не получаю это работает. Что я делаю не так?

вот мой код: http://sqlfiddle.com/#!2/c6faf/35/0

спасибо заранее!

уш

+0

Я положил скрипку на мой ответ, так что вы можете проверить его – Stephan

ответ

1

Попробуйте это:

SELECT 
    SUM(IF(activity = 'Form',1,0)) as 'Form', 
    SUM(IF(activity = 'Login',1,0)) as 'Login', 
    SUM(IF(activity = 'Reg',1,0)) as 'Reg' 
FROM 
    tbl_tracking 
WHERE 
    id = 141 
    AND variant = 2 

Sql скрипку here

+0

+1 для приятного решения :) – fancyPants

+0

@tombom thanks man – Stephan

+0

спасибо! Я думаю, это должно сработать для меня. – mmo

2

Здесь вы идете

SELECT 
MAX(CASE activity WHEN 'Form' THEN mysum ELSE NULL END) AS Form, 
MAX(CASE activity WHEN 'Login' THEN mysum ELSE NULL END) AS Login, 
MAX(CASE activity WHEN 'Reg' THEN mysum ELSE NULL END) AS Reg 
FROM (
SELECT activity, COUNT(activity) AS mysum FROM tbl_tracking 
      WHERE id = 141 AND variant = 2 
      GROUP BY activity 
)sq 

Но на мой взгляд, такое форматирование должно быть сделано в прикладном уровне, а не в базе данных слоя.

+0

+1 для «форматирование должно быть сделано в прикладном уровне, а не в слое базы данных.» – swapnesh

+0

+1 для альтернативы – Stephan

0

Для этого нужно использовать поворотную концепцию таблицы. здесь вы идете так же.

SELECT 
    SUM((IF(activity='Form',1,0))) as Form, 
    SUM((IF(activity='Login',1,0))) as Login, 
    SUM((IF(activity='Reg',1,0))) as Reg 
FROM 
    tbl_tracking 
WHERE 
    id = 141 
    AND 
    variant = 2; 

fiddle