2010-02-17 3 views
2

Я пытаюсь выполнить SQL-запрос, который генерирует таблицу с двумя столбцами, ссылающимися на одни и те же данные, но с использованием разных условных выражений. Мой результат запроса должен содержать столбцы типа:Объединить строки запроса SQL Union

Результат запроса:

  • Общее количество
  • Доступен Количество

Где Общее количество является общее количество определенного элемента и Доступно - это подмножество того же элемента, но только те, которые помечены как «Доступные».

Я попытался использовать UNION формы:

SELECT 
    '0' as Quantity, 
    COUNT (item.pkid) as Available 
FROM itemInstance, itemType 
WHERE 
    itemInstance.availability = 'AVAILABLE' 
    AND itemInstance.type = itemType.primary_key 
UNION 
SELECT 
    COUNT (DISTINCT item.pkid) as Quantity, 
    '0' as Available 
FROM itemInstance, itemType 
WHERE itemInstance.type = itemType.primary_key 

Что, конечно, производит что-то вроде:

Quantity Available 
1 0   2 
2 4   0 
3 0   3 
4 7   0 

Когда я действительно хочу:

Quantity Available 
1 4   2 
2 7   3 

Любой помощь будет оценена. Благодаря!

ответ

5

Я не думаю, что я понимаю все аспекты вашего запроса, но он должен в основном работать так:

SELECT 
    COUNT(*) as Quantity, 
    SUM(CASE WHEN itemInstance.availability = 'AVAILABLE' 
      THEN 1 
      ELSE 0 
      END) As Available 
FROM itemInstance, itemType 
WHERE itemInstance.type = itemType.primary_key 

CASE будет 1 для каждых Матчин строки и 0 для не Матчин строк, так сумма этих значений - количество доступных предметов.

BTW: Вы можете переключиться на Явные обозначения для лучшего readablity (особенно при более сложных запросов):

... 
FROM itemInstance 
JOIN itemType ON (itemInstance.type = itemType.primary_key) 
+0

Не могу написать лучше - хорошо сделано. – incarnate

+0

Это прекрасно работает! Благодаря! – RobotNerd

+0

Хорошо, что вы просите его использовать явные объединения. Неявные объединения - такая плохая практика. – HLGEM