Поскольку ваш вопрос еще не ясен, мы должны сделать несколько довольно широких догадок о том, что вы ищете. Если ваш стол действительно больше похож на:
Rooms
RoomID Color Room type
1 Black Large
2 White Large
3 White Small
4 Black Medium
5 Black Small
6 Black Large
7 White Large
8 White Small
9 White Large
10 White Large
И если вы хотите знать, есть ли больше черных или белых комнат каждого из трех размеров, и вы указываете что-то для «есть равное количество черных и белых комнат» (серые?), И если MS Access может использовать этот синтаксис, тогда возможно:
Количество комнат каждого цвета на каждый размер:
SELECT [Room type] AS RoomType, Color, COUNT(*) AS RoomCount
FROM Rooms
GROUP BY RoomType, Color
Самостоятельно объедините этот результат, чтобы получить черно-белые данные в одной таблице:
SELECT NVL(Black.RoomType, White.RoomType) AS RoomType,
NVL(WhiteCount, 0) AS WhiteCount,
NVL(BlackCount, 0) AS BlackCount
FROM (SELECT [Room type] AS RoomType, COUNT(*) AS WhiteCount
FROM Rooms
WHERE Color = 'White'
GROUP BY RoomType
) AS White
FULL OUTER JOIN
(SELECT [Room type] AS RoomType, COUNT(*) AS BlackCount
FROM Rooms
WHERE Color = 'Black'
GROUP BY RoomType
) AS Black
ON Black.RoomType = White.RoomType
(Я не знаю, поддерживает ли MS Access FULL OUTER JOIN. Если нет, вам придется работать усерднее. Точно так же я не проверял, поддерживает ли он NVL - может, вместо этого он поддерживает COALESCE.)
Это даст вам ряд строк, по одной для каждого типа комнаты, с WhiteCount и BlackCount.
Теперь вам просто нужно постобработать, чтобы предоставить вам информацию, которую вы ищете - если мои догадки оправданы.
Редактировать: Необходимо использовать NVL () или эквивалентный для RoomType и включать псевдонимы таблиц; сейчас тестируется и выдает правильный ответ на MacOS X 10.6.7 с IBM Informix Dynamic Server 11.70.FC1:
Roomtype Whitecount Blackcount
Large 4 2
Small 2 1
Medium 0 1
Если MS Access не поддерживает FULL OUTER JOIN, запрос очень запутан. Поддерживает ли он левое и правое (внешнее) соединение? Будем надеяться, потому что тогда вы можете использовать это (которое было изменено, чтобы предположить, что имя столбца - Rooms.RoomType (без имени в имени):
SELECT NVL(White.RoomType, Black.RoomType) AS RoomType,
NVL(WhiteCount, 0) AS WhiteCount,
NVL(BlackCount, 0) AS BlackCount
FROM (SELECT RoomType AS RoomType, COUNT(*) AS WhiteCount
FROM Rooms
WHERE Color = 'White'
GROUP BY RoomType
) AS White
LEFT OUTER JOIN
(SELECT RoomType AS RoomType, COUNT(*) AS BlackCount
FROM Rooms
WHERE Color = 'Black'
GROUP BY RoomType
) AS Black
ON Black.RoomType = White.RoomType
UNION
SELECT NVL(White.RoomType, Black.RoomType) AS RoomType,
NVL(WhiteCount, 0) AS WhiteCount,
NVL(BlackCount, 0) AS BlackCount
FROM (SELECT RoomType AS RoomType, COUNT(*) AS WhiteCount
FROM Rooms
WHERE Color = 'White'
GROUP BY RoomType
) AS White
RIGHT OUTER JOIN
(SELECT RoomType AS RoomType, COUNT(*) AS BlackCount
FROM Rooms
WHERE Color = 'Black'
GROUP BY RoomType
) AS Black
ON Black.RoomType = White.RoomType;
Эта формулировка основана на удалении дублирующихся строк в UNION. Учитывая данные испытаний, он дает тот же результат. Вы можете немного его сжать, используя White.RoomType в основном списке выбора первой половины UNION (вместо выражения NVL) и Black.RoomType во второй половине.
Если MS Access не поддерживает какие-либо внешние объединения, то (а) пришло время перейти на настоящую СУБД и (б) дайте мне знать, и мы разработаем длинный трехсторонний способ выполнения UNION та же работа.