Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用内联查询语句进行计数_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 使用内联查询语句进行计数

Sql 使用内联查询语句进行计数,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图从两个表中获得列数。我编写了如下SQL语句: 选择COUNT assetnum asset, 计数描述描述, 计数 案例 当停机时间>0时 那么资产 停止停机, 选择CountWonum 从工作订单 资产在哪里 从安装日期为'YYYY'='2011'的资产中选择assetnum 作为沃乌伯爵 来自资产 安装日期为“YYYY=”2011年的地点 我不明白为什么上面的代码不工作,即使内联语句返回单个值 数据如下: 资产表: assetnum description totdowntime

我试图从两个表中获得列数。我编写了如下SQL语句:

选择COUNT assetnum asset, 计数描述描述, 计数 案例 当停机时间>0时 那么资产 停止停机, 选择CountWonum 从工作订单 资产在哪里 从安装日期为'YYYY'='2011'的资产中选择assetnum 作为沃乌伯爵 来自资产 安装日期为“YYYY=”2011年的地点

我不明白为什么上面的代码不工作,即使内联语句返回单个值

数据如下:

资产表:

assetnum   description  totdowntime  insatlldate   siteid
1000        ABC         1            01-01-2011    AGN
1001        DEF         1.5          02-01-2011    AGN
1002        AKK         5            03-01-2011    AGN
1003        LSDL        3            04-01-2011    AGN
1004        JKDF        3.3          01-02-2012    AGN
1005        DFJK        4.5          01-02-2012    AGN
工作顺序表:

wonum   siteid  assetnum
  1      AGN    1000
  2      AGN    1001
  3      AGN    1002
  4      DVN    1000
  5      DVN    1001
  6      AGN    1004
期望输出:

asset_cnt   descrpition_cnt totdowntime_cnt wonum_cnt
    6          6             6                4
我得到的输出:

错误:ORA-00937:无法使用下面的查询中的单个组函数

SELECT COUNT (A.assetnum) AS asset, COUNT (A.description) AS description,
COUNT ( A.totdowntime) AS totdowntime,
COUNT (AN.wonum)
FROM asset A
INNER JOIN workorder AN
ON (A.assetnum  = AN.assetnum )
在何处输入字符A.installdate,'YYYY'='2011'

根据表A或表A为installdate使用别名 您可以在需要时使用用例

COUNT (CASE WHEN A.totdowntime > 0 THEN A.assetnum END)

我怀疑你想要这个:

SELECT COUNT(a.assetnum) as asset,
       COUNT(a.description) as description,
       SUM(CASE WHEN a.totdowntime > 0 AND a.assetnum IS NOT NULL THEN 1 ELSE 0 
           END) as totdowntime,
       (SELECT COUNT(wo.wonum)
        FROM workorder wo
        WHERE wo.assetnum = a.assetnum
       ) as wo_count
FROM asset a
WHERE installdate >= DATE '2011-01-01' AND
      installdate < DATE '2012-01-01';
注:

前两个计数可能返回相同的值。请记住,COUNT统计非空值的数量。 对于计算表达式中的值,我更喜欢求和而不是计数。但伯爵也很好。 我想您需要一个相关子查询来从workorder计数。 在任何查询中,表别名和限定列名都是一个好主意。
你能发布一些样本数据吗?你需要创建一些样本/测试数据来向我们和你自己演示你想要的行为。然后给我们看三件事;测试数据,你想要的结果,你实际得到的结果。