基于多个数据模式检索行

时间:2015-10-30 18:12:56

标签: sql oracle

我有以下表格数据:

enter image description here

问:如何仅检索以黄色突出显示的行?

思考:我尝试过的是按照ID_2列进行SUM(A),SUM(B),SUM(C)列和分组。之后,使用B = 1或A = 1的WHERE子句进行过滤以检索记录。但是,根据选择标准,我也得到了第一张唱片(A23,C1)。这就是我想避免检索的内容。

  

1)第一个标准始终是检索B = 1作为同一ID_2的优先级。

     

2)第二个标准是仅在考虑第一个标准的情况下检索A = 1的那些标准。因此,基于ID_2,如果已经检索到有效的B = 1记录,则不应检索两次。

     

在这种情况下,优选A34而不是A23   (例如,如果基于ID_2,A或B都有1,我会想要   排   其中B = 1。此外,A67,A89也被检索。

感谢生成此SELECT语句的帮助。

1 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

  • 选择B = 1
  • 的行
  • 如果没有其他行,也选择A = 1的行 对于具有B = 1
  • 的相同ID_2

如果是这样,那么这可以用这个SQL完成:

SELECT  ID_1, ID_2, A, B, C
FROM    tableName t1
WHERE   B = 1
    OR  (   A = 1 
        AND Not Exists (
                SELECT 1
                FROM   tableName t2
                WHERE  t1.ID_2 = t2.ID_2
                AND    B = 1)
        )

您可以按如下方式制作汇总版本:

SELECT  ID_2, SUM(A), SUM(B), SUM(C)
FROM    tableName t1
WHERE   B = 1
    OR  (   A = 1 
        AND Not Exists (
                SELECT 1
                FROM   tableName t2
                WHERE  t1.ID_2 = t2.ID_2
                AND    B = 1)
        )
GROUP BY ID_2