Выберите несколько счетов из одной таблицы базы данных в одной команде sql - PullRequest
5 голосов
/ 08 февраля 2011

У меня есть такая таблица базы данных Oracle, которая записывает объект, сканируемый в точке сканирования.

ItemsScan
ItemScanId
ItemScanPoint
ItemType
ScanTime

Я хочу вернуть ItemScanPoint вместе с количеством разопределенный ItemType был отсканирован в этом ItemScanPoint.

Что-то вроде ..

SELECT ItemScanPoint,
       (SELECT COUNT(*) WHERE ItemType = 1),
       (SELECT COUNT(*) WHERE ItemType = 2)
FROM   ItemsScan

Как мне это сделать в оракуле?

Какой самый эффективный способ?

Ответы [ 4 ]

13 голосов
/ 08 февраля 2011
SELECT   ItemScanPoint,
         SUM(CASE ItemType WHEN 1 THEN 1 ELSE 0 END) ,
         SUM(CASE ItemType WHEN 2 THEN 1 ELSE 0 END)   
FROM     ItemsScan 
GROUP BY ItemScanPoint
0 голосов
/ 12 марта 2012

Возможно сделать это, используя COUNT () в качестве аналитической функции:

SELECT DISTINCT ItemScanPoint, ItemType
     , COUNT(ItemScanId) OVER (PARTITION BY ItemScanPoint, ItemType)
  FROM ItemsScan

Он вернет данные в формате, отличном от запрашиваемого в OP, но вернет результаты для всех значений ItemType, а не только для двух.

Надеюсь, это поможет.

0 голосов
/ 08 февраля 2011

Счетчик - это функция группировки в Oracle. Попробуйте это:

select
 ItemType,
 count(ItemType)
from
 ItemsScan
group by
 ItemType
0 голосов
/ 08 февраля 2011

Это у вас работает?

select count(ItemScanId), itemscanpoint, itemtype
from itemsscan
where itemtype in (1,2)
group by itemtype, itemscanpoint
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...