在一个sql命令中从一个数据库表中选择多个计数

发布于 2024-10-16 10:24:01 字数 475 浏览 4 评论 0原文

我有一个像这样的Oracle数据库表,它记录了在扫描点扫描的项目。

物品扫描
ItemScanId
ItemScanPoint
项目类型
扫描时间

我想返回 ItemScanPoint 以及在该 ItemScanPoint 处扫描特定 ItemType 的次数。

类似于..

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

我如何在 Oracle 中执行此操作?

最有效的方法是什么?

I have a Oracle database table like so, which records an item being scanned at a scanning point.

ItemsScan
ItemScanId
ItemScanPoint
ItemType
ScanTime

I want to return the ItemScanPoint along with the number of times a specific ItemType was scanned at that ItemScanPoint.

Something along the lines of..

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

How do I do this in oracle?

What is the most efficient way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

傲世九天 2024-10-23 10:24:01
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
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
情栀口红 2024-10-23 10:24:01

这对你有用吗?

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

Does this work for you?

select count(ItemScanId), itemscanpoint, itemtype
from itemsscan
where itemtype in (1,2)
group by itemtype, itemscanpoint
痴情 2024-10-23 10:24:01

count是oracle中的一个分组函数。试试这个:

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

Count is a grouping function in oracle. Try this:

select
 ItemType,
 count(ItemType)
from
 ItemsScan
group by
 ItemType
瀟灑尐姊 2024-10-23 10:24:01

也可以使用 COUNT() 作为分析函数来执行此操作:

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

它将以与 OP 中要求的格式不同的格式返回数据,但它将返回 所有 值的结果code>ItemType 而不仅仅是两个。

希望这有帮助。

It might be possible to do this using COUNT() as an analytic function as well:

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

It will return the data in a different format than that asked in the OP but it will return results for all values of ItemType rather than just two.

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文