You're try to do a variation on a cross tab (or pivot) query.
It's ugly.
The idea is to create an expression for each output column where you SUM either a 1 or a zero depending on whether the column criteria match for each desired output column:
Code:
SELECT PosID,
SUM(CASE WHEN Gender='male' AND Ethnicity='caucasian' THEN 1 ELSE 0 END) as 'male/caucassian',
SUM(CASE WHEN Gender='female' AND Ethnicity='caucasian' THEN 1 ELSE 0 END) as 'female/caucasian',
...
GROUP BY PosID
ORDER BY PosID;
Jeff Mason
Custom Apps, Inc.
www.custom-apps.com