2014-12-22 2 views
-1

Я разрабатываю java swing applivcation. Я имею таблицу следующим образом:Преобразование строк в столбцы с группой в mysql java swing

Date  Name Amount 
20-1-2014 John 100 
20-1-2014 John 50 
20-1-2014 James 270 
20-1-2014 James 40 
20-1-2014 Thomas 70 
20-1-2014 Thomas 80 
21-1-2014 John 20 
21-1-2014 John 40 
21-1-2014 James 45 
21-1-2014 James 85 
21-1-2014 Thomas 10 
21-1-2014 Thomas 90 

Мне нужен результат, как следует с динамическими именами столбцов

Date  John James Thomas 
20-1-2014 150 310 150 
21-1-2014 60 130 100 

Я искал в интернете, но там нет подходящего ответа.

ответ

4

Что вы ищете, это pivot настольный оператор. К сожалению Mysql не родной pivot оператора, как SQL Server и других СУБД, но вы можете сделать это следующим образом:

SELECT 
    Date, 
    SUM(CASE WHEN Name = 'John' THEN Amount ELSE 0 END) AS 'John', 
    SUM(CASE WHEN Name = 'James' THEN Amount ELSE 0 END) AS 'James', 
    SUM(CASE WHEN Name = 'Thomas' THEN Amount ELSE 0 END) AS 'Thomas', 
    SUM(Amount) AS Total 
FROM tablename 
GROUP BY Date; 

Update:

Если вы хотите сделать это динамически для любых имен вместо того, чтобы писать их вручную, вы должны сделать это с помощью динамического sql. Что-то вроде этого:

SET @cols = NULL; 
SET @sql = NULL; 

SELECT 
    GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(Name = ''', 
     Name, ''', Amount , NULL)) AS ', '''', Name , '''') 
) INTO @cols 
FROM table1; 


SET @sql = CONCAT('SELECT 
    Date, ', @cols , ', SUM(Amount) AS Total 
FROM table1 
GROUP BY Date;'); 

prepare stmt 
FROM @sql; 

execute stmt; 

Вы можете поместить этот запрос внутри хранимой процедуры и вызвать его.

+0

, я хочу динамически показывать имена столбцов – user2601972

+0

@ user2601972 - ОК, я отредактирую свой ответ для динамической версии. –

+0

@ user2601972 - См. Мое редактирование –

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