oracle编写sql。关联unijz_unit_absorptive 和unijz_record_waybill 两张表,unijz_unit_absorptive的id等于unijz_record_waybill的absorptiveid字段。 unijz_unit_absorptive 有disposalname,area字段,unijz_record_waybill有state字段。现在查询unijz_record_waybill的state字段'已完成'和'异常'在每条unijz_unit_absorptive数据出现的次数
时间: 2024-01-15 16:05:26 浏览: 75
可以使用以下SQL语句查询unijz_record_waybill表中状态为“已完成”和“异常”的在每条unijz_unit_absorptive数据出现的次数:
```
SELECT
p.disposalname AS 处置场所名称,
p.area AS 处置场所所属区,
COUNT(CASE WHEN w.state = '已完成' THEN 1 ELSE NULL END) AS 已完成次数,
COUNT(CASE WHEN w.state = '异常' THEN 1 ELSE NULL END) AS 异常次数
FROM
unijz_unit_absorptive p
JOIN unijz_record_waybill w ON p.id = w.absorptiveid
GROUP BY
p.disposalname,
p.area
```
在这个SQL语句中,我们使用了JOIN关键字将两张表关联起来,并使用了ON关键字指定了关联条件。然后,我们使用了CASE WHEN语句对状态为“已完成”和“异常”的记录进行了条件判断,并使用COUNT函数对符合条件的记录进行计数。最后,我们使用GROUP BY子句对查询结果进行了分组,确保每条unijz_unit_absorptive数据出现的次数都被统计到了结果中。
相关问题
oracle编写sql。关联unijz_unit_absorptive 和unijz_record_waybill 两张表,
可以使用以下SQL语句关联unijz_unit_absorptive和unijz_record_waybill两张表:
```
SELECT
p.disposalname AS 处置场所名称,
p.area AS 处置场所所属区,
w.waybillno AS 运单号,
w.createtime AS 创建时间,
w.state AS 状态
FROM
unijz_unit_absorptive p
JOIN unijz_record_waybill w ON p.id = w.absorptiveid
```
在这个SQL语句中,我们使用了JOIN关键字将两张表关联起来,并使用了ON关键字指定了关联条件。最终的结果中包含了unijz_unit_absorptive表中的“处置场所名称”和“处置场所所属区”两列,以及unijz_record_waybill表中的“运单号”、“创建时间”和“状态”三列。
select p.disposalname as 处置场所名称, p.area as 处置场所所属区, processingcapacity as 处置场所类型, SUM(CASE WHEN w.state = '已完成' THEN 1 ELSE 0 END) AS count_1 from unijz_unit_absorptive p join unijz_record_waybill w on p.id = w.absorptiveid where w.createtime > to_date('2023-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');这条sql的问题在哪里
这条SQL语句的问题在于,SELECT语句中使用了“processingcapacity as 处置场所类型”,但是在FROM子句中没有将processingcapacity字段包含在查询的表中,因此无法使用该列名。另外,如果processingcapacity字段是个数字类型的列,应该使用SUM()函数对它进行聚合操作。
以下是修改后的SQL语句:
```
SELECT
p.disposalname AS 处置场所名称,
p.area AS 处置场所所属区,
SUM(CASE WHEN w.state = '已完成' THEN 1 ELSE 0 END) AS count_1,
MAX(p.processingcapacity) AS 处置场所类型
FROM
unijz_unit_absorptive p
JOIN unijz_record_waybill w ON p.id = w.absorptiveid
WHERE
w.createtime > to_date('2023-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
GROUP BY
p.disposalname,
p.area
```
在这个修改后的SQL语句中,我们将processingcapacity列包含在了SELECT语句中,并使用了MAX()函数对其进行聚合操作。同时,我们还对SELECT子句中的列名做了一些微调。最后,我们使用GROUP BY子句对查询结果进行了分组。
阅读全文