Depending on what decision I'm trying to make using the query, I often end up using a TRANSFORM for these kinds of things, for the only reason that I can catch wierd entries that are NOT 'foo' or 'bar', but something else that snuck into my nice clean dataset when I wasn't looking.

Example: if you just wanted to know the lowest value of 'foo' and compare it to the lowest value for 'bar', you might write (MSAccess-style):

TRANSFORM Min(paramValue) AS [The Value] SELECT box FROM myTable GROUP BY box PIVOT paramName;

This would give you:

box | foo | bar | grok\n----+-----+-----+-----\n  1 |  0  |  1  |  0\n  2 |  1  | 13  |  0\n  3 |  4  |  6  |  1


BUT you have to be careful with this sort of thing--careful that the number of possible paramNames doesn't exceed the number of columns your table (or brain, or eyes) can handle.