Oracle sql to count instances of different values in single column(Oracle sql计算单列中不同值的实例)
问题描述
我有一个带有状态列的表.我想要一个 Oracle sql 查询,它只会在一行中列出我在每个状态中的行数.例如,如果我的桌子是
I have a table with status column. I want an Oracle sql query which will list me count of rows in each status in only one row. for eg if my table is
Table A
Id Status Fkey
1 20 500
2 20 500
3 30 501
4 40 501
5 30 502
输出应该是
Fkey Count_status20 Count_status30 Count_status40
500 2 0 0
501 0 1 1
这里有点扭曲
Table B
FKey TKey
500 1001
501 1001
502 1002
现在输出应该是
TKey Count_status20 Count_status30 Count_status40
1001 2 1 1
1002 0 1 0
推荐答案
如果你使用的是Oracle 11g,那么你可以使用PIVOT函数:
If you are using Oracle 11g, then you can use the PIVOT function:
select *
from
(
select tkey, status,
status as col
from tableB b
left join tableA a
on a.fkey = b.fkey
) src
pivot
(
count(status)
for col in ('20' as Count_Status20,
'30' as Count_Status30,
'40' as Count_Status40)
) piv;
请参阅 SQL Fiddle with Demo
如果你不使用Oracle11g,那么你可以使用带有CASE语句的聚合函数:
If you are not using Oracle11g, then you can use an aggregate function with a CASE statement:
select tkey,
count(case when status = 20 then 1 else null end) as Count_Status20,
count(case when status = 30 then 1 else null end) as Count_Status30,
count(case when status = 40 then 1 else null end) as Count_Status40
from tableB b
left join tableA a
on b.fkey = a.fkey
group by tkey
请参阅 SQL Fiddle with Demo
这篇关于Oracle sql计算单列中不同值的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Oracle sql计算单列中不同值的实例
基础教程推荐
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 无法解决整理冲突 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- 是否可以执行按位分组功能? 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- 在 SQL 中连接多个表 2021-01-01
