An old thread but, yes... there is a way to do it in Oracle:

    with

    employee(id, firstname, lastname, hobbies) as
    (
      select 1, 'a', 'b', '1' from dual union 
      select 2, 'a', 'b', '2' from dual union 
      select 3, 'a', 'b', '3' from dual union 
      select 4, 'c', 'd', '3' from dual union 
      select 5, 'e', 'f', '2' from dual  
    )

    select * 
    from employee 
    pivot
    ( 
      max(1) fake  
      for (hobbies) -- put the undesired columns here
      IN () 
    ) 
    where 1=1 -- and anything more...
    order by id

What it does - the <b>PIVOT</b> - is group all rows through all columns except those declared in the <b>PIVOT</b> clause. The declared columns will be replaced by new columns defined by the aggregations before the <b>FOR</b> clause for each filter specified inside the <b>IN</b> clause. 

A better example would be the following query:

    select * 
    from employee 
    pivot
    (
      max(id) foo,
      max(1)  bar
      for (hobbies) 
      IN ('2' as two, '3' as three)
    )

That's the result: <br/>
<pre>
FIRSTNAME | LASTNAME | TWO_FOO | TWO_BAR | THREE_FOO | THREE_BAR
    c          d         null      null        4           1
    e          f           5        1         null        null
    a          b           2        1          3           1
</pre>

All columns except the <b>id</b> and <b>hobbies</b> will be grouped, so it will group by <b>firstname</b> and <b>lastname</b>, which will result in three groups ('c', 'd') | ('e', 'f') | ('a', 'b'). Following, four columns will be created... two aggregation columns (as there are two <b>MAX</b> clause specified) for each filter in the <b>IN</b> clause and the aggregations are applied in the resulting groups.

Well, returning to the first query, it does works for two reasons:<br/>
1- you will not lose any row in the grouping process because the <b>id</b> column is unique and no columns were specified for aggregations; <br/>
2- as the pivot generates N * M new columns, where N = "number of filters" and M = "number of aggregations", having no filters and that single "harmless" aggregation means in 1 * 0 = 0 new columns, also removing all columns specified in the <b>PIVOT</b> clause, which is just the <b>hobbies</b>.

<br />
<b>ANSWER TO COMMENT 1</b>

The first line of this question says: _"... without having to specify the fields you want"_. In all other positive answers the proposed queries specifies the desired fields in the <b>SELECT</b> clause, except in mine, actually. 

Also, in the question title says _"... without writer's cramp"_. Well, what's the correct measure to identify a writer's cramp? My best effort would be to foresee a good SQL standard to this problem and compare with my answer. Actually, I think this "standard" could be something like <b>SELECT * NOT IN ([col1], [col2], ...)</b>. 

Now, I can see in both queries:

- a list of undesired columns;
- an <b>IN</b> clause;
- a three characters clause - <b>FOR</b> and <b>NOT</b>;

It means that you need to write a bit more in my approach as you need a fake aggregation (you don't need to give it an alias as I did, just write <b>MAX(1)</b>) and the <b>PIVOT</b> clause... It's too much for me if I spend two seconds to write these keywords and also, I have no problem to remember how to write this query - it is as easy to remember as the probable "standard". I can't really see a writer's cramp here.