2011-02-08 24 views
5

私はスキャンポイントでスキャンされているアイテムを記録するようなOracleデータベーステーブルを持っています。1つのSQLコマンドで1つのデータベーステーブルから複数のカウントを選択

ItemsScan

をItemScanId ItemScanPoint
itemTypeに
私は一緒にItemScanPointを返すようにしたいScanTime

特定のItemTypeがそのItemScanPointでスキャンされた回数。線に沿って

何か..私は神託でこれを行うにはどうすればよい

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コマンドの後にいます。アイテムスキャンポイント名とすべてのカウントが1つのレコードに返されるようにします。 – endorphin

+0

@endorphin:フォームの...何? – FrustratedWithFormsDesigner

+0

申し訳ありませんが、Enterがそのコメントを送信したことを認識しませんでした。私はオリジナルを編集しました。 – endorphin

0

カウントはoracleのグループ化関数です。同様に、この使用してCOUNT()解析関数などを行うことは可能であるかもしれない

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

OPはまた、結果セットに 'ItemScanPoint'を追加することを望んでいます... – FrustratedWithFormsDesigner

0

:これを試してみてください

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

それは尋ねたよりも、それは別の形式でデータを返します。 OPの中ではすべてのの値がItemTypeではなく2だけ返されます。

これが役に立ちます。

関連する問題