2011-02-08 53 views
5

Tôi có một bảng cơ sở dữ liệu Oracle như vậy, ghi lại một mục được quét tại một điểm quét.Chọn nhiều số đếm từ một bảng cơ sở dữ liệu trong một lệnh sql

ItemsScan
ItemScanId
ItemScanPoint
itemtype
ScanTime

Tôi muốn trả lại ItemScanPoint cùng với số lần một ItemType cụ thể được quét tại ItemScanPoint đó.

cái gì đó dọc theo dòng của ..

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

Làm thế nào để làm điều này trong oracle?

Cách hiệu quả nhất là gì?

Trả lời

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, Đây có lẽ là giải pháp tốt nhất vì CASE là SQL chuẩn nhưng cũng có thể sử dụng hàm DECODE() của Oracle, ví dụ: SUM (DECODE (ItemType, 1, 1, 0)), SUM (DECODE (ItemType, 2, 1, 0)) '. Có thể tiết kiệm một số tổ hợp phím nếu bạn không cần một giải pháp di động. –

0

Tính năng này có phù hợp với bạn không?

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

Tôi có nhiều hơn sau lệnh SQL sẽ có lệnh chọn của biểu mẫu 'select itemscanpoint, count (itemType1), count (itemType2), count (itemTypeX)'. Vì vậy, tên điểm quét mục và tất cả các số được trả về trong một bản ghi. – endorphin

+0

@endorphin: của biểu mẫu ... cái gì? – FrustratedWithFormsDesigner

+0

Xin lỗi, không nhận ra, Enter sẽ gửi nhận xét. Tôi đã chỉnh sửa bản gốc. – endorphin

0

Đếm là hàm nhóm trong oracle. Hãy thử điều này:

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

Ngoại trừ OP cũng muốn 'ItemScanPoint' trong tập kết quả ... – FrustratedWithFormsDesigner

0

Nó có thể là khả năng để làm điều này bằng COUNT() là một hàm giải tích cũng như:

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

Nó sẽ trả lại dữ liệu trong một định dạng khác so với yêu cầu đó trong OP nhưng nó sẽ trả lại kết quả cho tất cả giá trị của ItemType thay vì chỉ hai.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan