I think you can do this in pure SQL. Here is my attempt:

CREATE TABLE newTable (
        `id` INT
        , `remoteid` INT
        , `value_a` INT
        , `value_b` INT
        , `value_c` INT
        , `when` DATE
) 
SELECT 
        `id`
        `remoteid`
        , MAX(IF(`type`='a', `value`, null))
        , MAX(IF(`type`='b', `value`, null))
        , MAX(IF(`type`='c', `value`, null))
        , `when`
FROM events
GROUP BY (`id`, `remoteid`,`when`);

This is just a variation on the "pivot table" technique.

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine


Fagyal Csongor <[EMAIL PROTECTED]> wrote on 09/03/2004 10:44:37 AM:

> Hi,
> 
> I have a table that looks like this:
> 
> table events:
> id : INT
> remoteid: INT
> type : enum ('a','b','c')
> value: INT
> when: DATE
> 
> For each 'remoteid' and 'when', there are 3 rows with type=a,b,c 
> respectively. (Bad table design that is...) I would like to shorten this 

> table so it will look like this:
> id : INT
> remoteid: INT
> value_a: INT
> value_b: INT
> value_c: INT
> when: DATE
> 
> My idea is to dump this table (it is a quite big table with 10M+ rows), 
> write a perl script to "concatenate" corresponding 'when'+'remoateid' 
> fields, and load the resulting file into another table.
> 
> Just fo curiosity: can this processing be written in pure MySQL?
> 
> Thank you,
> - Csongor
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
> 

Reply via email to