Sql 使用内联查询语句进行计数
我试图从两个表中获得列数。我编写了如下SQL语句: 选择COUNT assetnum asset, 计数描述描述, 计数 案例 当停机时间>0时 那么资产 停止停机, 选择CountWonum 从工作订单 资产在哪里 从安装日期为'YYYY'='2011'的资产中选择assetnum 作为沃乌伯爵 来自资产 安装日期为“YYYY=”2011年的地点 我不明白为什么上面的代码不工作,即使内联语句返回单个值 数据如下: 资产表:Sql 使用内联查询语句进行计数,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图从两个表中获得列数。我编写了如下SQL语句: 选择COUNT assetnum asset, 计数描述描述, 计数 案例 当停机时间>0时 那么资产 停止停机, 选择CountWonum 从工作订单 资产在哪里 从安装日期为'YYYY'='2011'的资产中选择assetnum 作为沃乌伯爵 来自资产 安装日期为“YYYY=”2011年的地点 我不明白为什么上面的代码不工作,即使内联语句返回单个值 数据如下: 资产表: assetnum description totdowntime
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计数。
在任何查询中,表别名和限定列名都是一个好主意。
你能发布一些样本数据吗?你需要创建一些样本/测试数据来向我们和你自己演示你想要的行为。然后给我们看三件事;测试数据,你想要的结果,你实际得到的结果。