Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 - Fatal编程技术网

Sql 用于验证分区组中是否存在项的查询

Sql 用于验证分区组中是否存在项的查询,sql,oracle,Sql,Oracle,我有一组类似于以下格式的数据 GROUP | ELEMENT --------------- 1 | A 1 | B 1 | C 2 | A 3 | B 4 | A 4 | B 5 | A 5 | C 群元素 --------------- 1 | A 1 | B 1 | C 2 | A 3 | B 4 | A 4 | B 5 | A 5摄氏度 我希望能够验证元素A和B是否存在于每个组中。

我有一组类似于以下格式的数据

GROUP | ELEMENT --------------- 1 | A 1 | B 1 | C 2 | A 3 | B 4 | A 4 | B 5 | A 5 | C 群元素 --------------- 1 | A 1 | B 1 | C 2 | A 3 | B 4 | A 4 | B 5 | A 5摄氏度 我希望能够验证元素A和B是否存在于每个组中。理想情况下,我只返回同时包含这两个元素的组。在上面的例子中,我只想返回组1和组4

编辑:

对不起,我不应该暗示“A”和“B”是唯一的选项。是否可以专门查找是否存在特定值,如“A”和“B”?可能还有其他可能的值。我已经更新了示例数据以反映这一点。

不确定以下操作是否有效,但您可以尝试一下

SELECT group, COUNT(DISTINCT(element))
FROM table
group by group
having COUNT(DISTINCT(element)) = 2

我不确定
COUNT(DISTINCT(element))
是否有效

此查询将返回所有组(ID)和元素(名称),其中每个组正好有两个不同的元素。将中的条款更改为修改“恰好两个不同的元素”规则


这更像是一个
关系划分
问题,但您需要用每个
元素显示每个

查询:

SELECT  a.*
FROM    TableName a
WHERE   EXISTS
        (
            SELECT  1
            FROM    TableName b
            WHERE   a."GROUP" = b."GROUP" AND
                    b."ELEMENT" IN ('A','B')
            GROUP   BY b."GROUP"
            HAVING  COUNT(*) = 2
        )
输出

╔═══════╦═════════╗
║ GROUP ║ ELEMENT ║
╠═══════╬═════════╣
║     1 ║ A       ║
║     1 ║ B       ║
║     1 ║ C       ║
║     4 ║ A       ║
║     4 ║ B       ║
╚═══════╩═════════╝
╔═══════╗
║ GROUP ║
╠═══════╣
║     1 ║
║     4 ║
╚═══════╝
但是如果您只想返回
,您可以在下面简单地使用它

SELECT  "GROUP"
FROM    TableName b
WHERE   "ELEMENT" IN ('A','B')
GROUP   BY "GROUP"
HAVING  COUNT(*) = 2
输出

╔═══════╦═════════╗
║ GROUP ║ ELEMENT ║
╠═══════╬═════════╣
║     1 ║ A       ║
║     1 ║ B       ║
║     1 ║ C       ║
║     4 ║ A       ║
║     4 ║ B       ║
╚═══════╩═════════╝
╔═══════╗
║ GROUP ║
╠═══════╣
║     1 ║
║     4 ║
╚═══════╝
**id是问题中的组,表名是堆栈


如果我们删除“ELEMENT IN”条件,我们将能够获得包含多个元素的所有组

它返回的组仅包含元素A和B

SELECT a.*
FROM Table a
WHERE EXISTS
(
    SELECT 1
    FROM Table b
    WHERE a.group = b.group
    GROUP BY b.group
   HAVING COUNT(distinct element) = 2
)
and a.element IN ('A','B')

你能出示你的原始数据吗?对不起,我不应该暗示数据是另一种格式的。这表示从简单选择返回的原始数据的子集。+1。是的,虽然不需要元素周围的括号,但这会起作用。例如,如果有两个条目并且都包含一个“a”元素,那么不简单地进行计数(*)也会返回一个结果吗?正如我指出的,我希望确保这两个元素都包括在内。