首页 > 解决方案 > Oracle SQL 显示每行中两个列值的特定组合的结果

问题描述

我想就以下问题寻求帮助。我有每次随机生成的表。在该表中,如果组和类型组合的出现次数超过 0,我想显示信息。

例如这是随机生成的表:

团体 类型
一种
一种
C
一种
C

我想看看,如果每组 T 类型的出现次数超过 0 次。

所以在这种情况下,组“A”有超过 0 次出现类型“T”,所以每行将显示组 A 的“1”。组“B”和组“C”没有出现类型“T” ,因此 C 的每一行将在附加列中显示 0。像下面的结果:

团体 类型 RES
一种 1
一种 1
C 0
1
一种 1
C 0

是否有请查询,可以解决这个问题?

先感谢您,

引流

标签: sqloracle

解决方案


您可以在分析函数中使用条件聚合:

SELECT t.*,
       LEAST(
         COUNT(CASE type WHEN 'T' THEN 1 END) OVER (PARTITION BY "GROUP"),
         1
       ) AS res
FROM   table_name t

其中,对于样本数据:

CREATE TABLE table_name ( "GROUP", TYPE ) AS
SELECT 'A', 'T' FROM DUAL UNION ALL
SELECT 'A', 'T' FROM DUAL UNION ALL
SELECT 'C', 'P' FROM DUAL UNION ALL
SELECT 'B', 'T' FROM DUAL UNION ALL
SELECT 'A', 'P' FROM DUAL UNION ALL
SELECT 'C', 'P' FROM DUAL

输出:

团体 类型 RES
一种 1
一种 1
一种 1
1
C 0
C 0

db<>在这里摆弄


推荐阅读