2011-02-08 4 views
5

나는 이와 같이 오쏘링 포인트에서 스캔되는 항목을 기록하는 Oracle 데이터베이스 테이블을 가지고 있습니다.하나의 sql 명령에서 하나의 데이터베이스 테이블에서 다중 카운트 선택


이 ItemType은 ItemScanPoint

을 ItemScanId ItemsScan
ScanTime

내가 함께 ItemScanPoint을 반환하려면 해당 ItemScanPoint에서 특정 ItemType을 검색 한 횟수입니다. 의 라인을 따라

뭔가 .. 내가 오라클에서이 작업을 수행하려면 어떻게

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

?

가장 효율적인 방법은 무엇입니까?

답변

13
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

@endorphin, 이것은 CASE가 표준 SQL이기 때문에 아마도 가장 좋은 해결책 일 것입니다.하지만 Oracle DECODE() 함수, 예를 들어'SUM (DECODE (ItemType, 1, 1, 0)), SUM (DECODE (ItemType, 2, 1, 0))'을 포함합니다. 휴대용 솔루션이 필요하지 않은 경우 키 입력을 줄일 수 있습니다. –

0

이 방법이 유용합니까?

select count(ItemScanId), itemscanpoint, itemtype 
from itemsscan 
where itemtype in (1,2) 
group by itemtype, itemscanpoint 
+0

나는'select itemscanpoint, count (itemType1), count (itemType2), count (itemTypeX)'형식의 select 명령을 가진 SQL 명령 다음에 더 많다. 따라서 항목 스캔 지점 이름과 모든 개수가 하나의 레코드로 반환됩니다. – endorphin

+0

@endorphin : 형태의 ... 무엇? – FrustratedWithFormsDesigner

+0

죄송합니다. Enter 키를 눌러 의견을 제출하지 않았습니다. 원본을 편집했습니다. – endorphin

0

카운트 오라클의 그룹화 기능입니다. 이 시도 :

 
select 
ItemType, 
count(ItemType) 
from 
ItemsScan 
group by 
ItemType 
+0

OP는 또한 결과 집합에'ItemScanPoint'를 원합니다 ... – FrustratedWithFormsDesigner

0

그것은 할 수있을뿐만 아니라 분석 함수로()이 사용 COUNT을 할 :

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

그것은 그 요구는 다른 형식으로 데이터를 반환합니다 그러나 그것은 단지 두 개가 아닌 모두 값을 ItemType으로 반환합니다.

희망이 도움이됩니다.

관련 문제